Sistema de banco de dados distribuído: como usar o HBase para construir um mecanismo de busca Weibo?

Autor: Zen e a arte da programação de computadores

1. Introdução

Visão geral

Com o rápido desenvolvimento da Internet, o número de utilizadores e de atividades sociais explodiu. Portanto, estão surgindo novos aplicativos baseados na Internet, como Sina Weibo, WeChat Moments, QQ Zone, Zhihu, Sohu News, etc. Esses sites têm grandes grupos de usuários e geram grandes quantidades de dados todos os dias. Como os grandes desafios podem processar e analisar big data com rapidez e precisão e usá-los para descoberta de informações, análise do comportamento do usuário e design, desenvolvimento e implantação de sistemas de recomendação? Todos esses aplicativos precisam ser capazes de armazenar, recuperar e analisar dados massivos, estruturados e não estruturados. Os bancos de dados relacionais tradicionais são ineficientes no processamento de dados massivos e não conseguem atender à demanda. Bancos de dados distribuídos podem resolver esse problema com eficácia. Os bancos de dados distribuídos permitem que vários servidores armazenem, recuperem e gerenciem em conjunto grandes quantidades de dados e forneçam alta disponibilidade, tolerância a falhas, escalabilidade e outras vantagens. Entre eles, Apache HBase é um sistema de banco de dados NoSQL distribuído de código aberto. Este artigo explica principalmente o princípio de funcionamento, conceitos relacionados, características, cenários aplicáveis ​​e sua aplicação no mecanismo de busca Weibo do HBase.

História do Desenvolvimento

Apache Hadoop é um dos projetos de código aberto da Apache Foundation e é uma estrutura que fornece um modelo de computação distribuída. Seu núcleo é um sistema de arquivos distribuído (HDFS) que suporta leitura e gravação de streaming e possui tolerância a falhas confiável; o modelo MapReduce é usado para computação paralela de big data; a tecnologia YARN é responsável pelo agendamento de recursos e monitoramento de tarefas.

O Hadoop é conhecido por seus recursos eficientes de processamento de dados e escalabilidade elástica, mas também apresenta alguns problemas. Em primeiro lugar, devido às limitações do modelo MapReduce, consultas em tempo real não podem ser realizadas durante o processamento de dados massivos. Em segundo lugar, existe o problema da inconsistência dos dados. Quando vários nós modificam os mesmos dados, resultando em inconsistência de dados, é difícil solucionar erros. Terceiro, o MapReduce no Hadoop só pode processar dados estruturados, mas não pode fazer nada com dados semiestruturados ou não estruturados, como texto ou dados JSON.

Para resolver os problemas acima, os desenvolvedores do Hadoop começaram a pensar em como implantar um banco de dados distribuído no Hadoop. Assim nasceu o HBase, que é um sistema de banco de dados NoSQL distribuído baseado em Hadoop. O HBase é otimizado com base no Hadoop para permitir o armazenamento e processamento de dados massivos com desempenho de leitura e gravação de altíssima velocidade e para garantir consistência de dados e tolerância a falhas. Ele adota um modo de armazenamento de família de colunas (ColumnFamily), de modo que uma única tabela pode ser dividida em clusters de colunas de diferentes dimensões, e cada cluster de colunas pode ter topologia independente. Ao mesmo tempo, ele também oferece suporte a consultas distribuídas em tempo real e pode responder às necessidades de consultas em tempo real dos usuários.

Até o momento, o HBase se tornou um projeto de alto nível da Apache Software Foundation, e sua comunidade cresceu rapidamente e se tornou uma das ferramentas de código aberto mais populares para processamento de big data.

2. Conceitos fundamentais

2.1 Modelo de dados

O conceito mais importante no HBase é “tabela”. Cada tabela é uma coleção ordenada e relacionada de dados. Cada tabela consiste em várias colunas, cada coluna contendo o mesmo tipo de valores de dados. Cada linha contém várias células e as células são classificadas de acordo com grupos de colunas. Os dados na célula são classificados por carimbo de data/hora, garantindo que os dados mais recentes estejam na frente.

2.2 ColunaFamília

ColumnFamily é semelhante ao conjunto de campos de uma tabela em um banco de dados relacional. Cada ColumnFamily pode ser definida de forma flexível de acordo com sua própria lógica de negócios para evitar o desperdício de recursos do disco rígido causado pelo armazenamento repetido de determinados dados. Em circunstâncias normais, uma tabela geralmente contém vários ColumnFamily. Por exemplo, a tabela user_info pode ter três ColumnFamily: nome, idade e sexo. Diferentes empresas podem usar diferentes famílias de colunas.

2.3 Região

Região é uma unidade de armazenamento independente, usada principalmente para armazenar blocos de dados armazenados em HDFS. O tamanho padrão de uma região é 128 MB, com mínimo de 32 MB. As regiões são fisicamente cortadas em blocos HDFS menores, o que permite operações de E/S paralelas e melhora a eficiência de leitura e gravação. Cada região terá uma chave inicial e uma chave final, que determinam o intervalo de chaves contido na região. Todas as operações de atualização serão registradas sequencialmente no arquivo WAL (Write Ahead Log) para restaurar a integridade dos dados em caso de falha ou outros problemas.

2.4 Divisão

Quando os dados em uma região excedem o limite predefinido, o HBase dividirá automaticamente a região em duas sub-regiões e distribuirá uniformemente os dados para as duas sub-regiões. Por padrão, o HBase verifica o volume de dados a cada 10 minutos. Se descobrir que os dados em uma região excedem o limite predefinido, ele aciona a função automática de divisão de regiões.

2.5 Mestre/Escravo

A arquitetura mestre/escravo do HBase pode facilmente expandir o cluster horizontalmente e melhorar o desempenho do sistema. Vários nós mestres podem ser configurados em um cluster HBase e trabalham juntos para concluir várias tarefas, incluindo a alocação de regiões para nós escravos, alocação de segmentação de dados, execução de coleta de lixo e roteamento de solicitações de clientes. Cada nó escravo salva cópias de todas as regiões, incluindo status ativo e em espera. Quando ocorre um problema com o nó mestre, o nó escravo de backup pode assumir o trabalho para garantir a disponibilidade do serviço.

3. Princípios básicos

3.1 Processo de gravação de dados

  1. O cliente envia uma solicitação de gravação ao Master por meio da API Thrift ou API RESTful.
  2. Mestre verifica permissões e determina RegionServer para hospedar operações de gravação
  3. Master gera solicitações RPC de gravação para clientes
  4. Cliente envia solicitação RPC de gravação através de conexão TCP
  5. Quando um RegionServer responde ao RPC de gravação do Master, o RegionServer entrará no estado de pré-confirmação.
  6. RegionServer gravará os dados na memória e depois persistirá os dados no HDFS em lotes
  7. Quando os dados forem gravados, o RegionServer notificará o Master
  8. O Master atualiza os metadados e marca a região escrita com sucesso como "Comprometida"
  9. Se a gravação falhar, o Master tentará novamente a solicitação de gravação.

3.2 Processo de consulta de dados

  1. O cliente envia uma solicitação de consulta para qualquer RegionServer por meio da API Thrift ou API RESTful.
  2. RegionServer encontra o MemStore correspondente com base na solicitação de leitura e retorna o resultado ao cliente.
  3. Se o MemStore não existir, o RegionServer obterá o leitor de arquivos HDFS apropriado do Master para ler os dados.
  4. Os resultados da consulta serão armazenados em cache no BlockCache para consultas subsequentes.

3.3 Fragmentação de dados

  1. O HBase dividirá a tabela inteira em várias regiões com base no intervalo RowKey.
  2. Por padrão, o HBase dividirá cada região igualmente em 128M, ou seja, uma região será dividida em 128 blocos HDFS de 16KB. Isso significa que a capacidade máxima de cada bloco HDFS é 128M e a capacidade mínima é 32M. O número de divisões pode ser ajustado através do parâmetro hbase.regionserver.region.split.policy em hbase-site.xml.
  3. Quando uma operação de atualização for concluída, o HBase localizará a região com base no RowKey. Se o tamanho da região exceder um determinado limite, o HBase acionará uma operação de corte automática e dividirá a região atual.

3.4 Mecanismo de expiração de dados

  1. O HBase introduz um mecanismo TTL (Time To Live), ao definir o atributo TTL da família de colunas, o HBase pode excluir a célula correspondente após um período de tempo.
  2. O TTL pode reduzir o uso do espaço de armazenamento do HBase porque as células expiradas podem ser excluídas, economizando espaço em disco.
  3. Os usuários podem definir o atributo TTL da Tabela ou definir o atributo TTL de uma ColumnFamily específica. O HBase verificará e excluirá automaticamente as células expiradas.

3.5 Failover do RegionServer

  1. Quando um RegionServer falha, o HBase tentará recuperá-lo dentro de um determinado período de tempo.
  2. Quando ocorre uma falha, o HBase não perderá as transações confirmadas e essas transações serão salvas no arquivo WAL.
  3. Quando o RegionServer volta ao normal, ele copia o arquivo WAL do JournalNode e o carrega na memória.
  4. Quando o RegionServer receber a mensagem de pulsação do mestre, ele aceitará novas solicitações.

3.6 Redundância de dados

  1. O HBase oferece suporte ao mecanismo de cópia de dados de vários RegionServers para evitar perda de dados.
  2. Os usuários podem especificar o número de RegionServers no arquivo de configuração hbase-site.xml e o HBase criará automaticamente vários RegionServers.
  3. Quando os dados forem atualizados, o HBase sincronizará automaticamente os dados com vários RegionServers.
  4. Os usuários podem usar o comando hbase shell hbase dfsreplication para verificar se uma região possui múltiplas réplicas.

4. Casos de aplicação

4.1 Modelagem de mecanismos de busca

4.1.1 Objetos de pesquisa

O principal conteúdo que o mecanismo de busca do Weibo precisa pesquisar é o Weibo. Existem quatro objetos de pesquisa principais: página inicial do usuário, página de detalhes do Weibo, fãs de usuários e lista de observação de usuários.

4.1.2 Estrutura do índice

Página inicial do usuário: o conteúdo a ser pesquisado inclui o local de publicação do Weibo, horário de publicação e conteúdo publicado. Portanto, a estrutura do índice que precisa ser estabelecida é a seguinte:

{
  "user": "user1", // 用户ID
  "weibo_id": "wb1", // 微博ID
  "location": "北京市",
  "created_at": "2016-12-12T12:12:12Z",
  "text": "这是一条测试微博"
}

Página de detalhes do Weibo: o conteúdo a ser pesquisado inclui o número de comentários, curtidas e retuítes no Weibo. Portanto, a estrutura do índice que precisa ser estabelecida é a seguinte:

{
  "user": "user1", // 用户ID
  "weibo_id": "wb1", // 微博ID
  "comment_count": 10, // 评论数量
  "like_count": 20, // 点赞数量
  "repost_count": 15 // 转发数量
}

Fãs usuários: O conteúdo a ser pesquisado inclui o apelido do fã, o número de seguidores dos fãs e a data de aniversário do fã. Portanto, a estrutura do índice que precisa ser estabelecida é a seguinte:

{
  "follower": "fans1", // 粉丝ID
  "name": "fan1", // 昵称
  "following_count": 10, // 关注数
  "birthday": "1990-01-01T00:00:00Z" // 生日
}

Lista de seguidores do usuário: O conteúdo a ser pesquisado inclui o apelido do seguidor, a data de nascimento do seguidor e o número de fãs do seguidor. Portanto, a estrutura do índice que precisa ser estabelecida é a seguinte:

{
  "followee": "fans1", // 关注人ID
  "name": "fan1", // 昵称
  "birthday": "1990-01-01T00:00:00Z", // 生日
  "followers_count": 100 // 粉丝数量
}

4.1.3 Manutenção do índice

Evento de publicação do Weibo: Quando um novo Weibo é publicado, o HBase inserirá automaticamente o ID do usuário e as informações do Weibo que publicou o Weibo, e o índice será estabelecido com sucesso.

Comentários, curtidas e retuítes do Weibo: quando há comentários, curtidas e retuítes do Weibo, o HBase atualizará automaticamente as informações do índice do Weibo, como aumentar o número de comentários, curtidas e retuítes.

Mudanças de fãs: Quando houver mudanças de fãs, o HBase atualizará automaticamente as informações do índice de fãs, como adicionar novos fãs, modificar atributos de fãs, etc.

Mudanças na lista de observação: Quando houver alterações na lista de observação, o HBase atualizará automaticamente as informações do índice da lista de observação, como adicionar novos seguidores, modificar as propriedades de seguir pessoas, etc.

4.2 Pesquisa em tempo real

4.2.1 Pesquisa de ponto de acesso

Pesquisa quente: como o nome sugere, é o conteúdo de pesquisa mais popular, ou seja, os termos de pesquisa com popularidade de pesquisa relativamente alta. Os mecanismos de pesquisa do Weibo precisam contar a popularidade das palavras-chave de pesquisa em tempo real e atualizar as pesquisas mais populares em tempo real.

Solução: O mecanismo MapReduce do HBase pode contar de maneira muito conveniente a popularidade das palavras-chave de pesquisa. Os mecanismos de pesquisa importam regularmente logs históricos para o HBase, e o HBase pode executar o programa MapReduce para contar a popularidade das palavras-chave de pesquisa. Além disso, dados antigos de pesquisas de pontos de acesso podem ser apagados regularmente com base nas condições comerciais.

4.2.2 Sugestões de pesquisa

Sugestões de pesquisa: quando os usuários inserem palavras-chave, esperamos que o mecanismo de pesquisa forneça aos usuários sugestões de pesquisa relevantes para ajudá-los a concluir a pesquisa rapidamente. Os mecanismos de pesquisa do Weibo precisam gerar sugestões de pesquisa em tempo real para ajudar os usuários a preencher palavras-chave rapidamente.

Solução: O mecanismo de busca precisa combinar as palavras-chave inseridas pelo usuário, interesses e hobbies do usuário, registros históricos de pesquisa e outros fatores para gerar sugestões de pesquisa correspondentes em tempo real. Embora o HBase forneça recursos de consulta rápida em tempo real, ele também pode fornecer cache, consulta assíncrona e outras tecnologias para reduzir a latência.

4.3 Mecanismo de regras de negócios

Os mecanismos de pesquisa do Weibo também precisam oferecer suporte a mecanismos de regras de negócios complexos, como revisão do Weibo, filtragem inteligente, etc.

Solução: Através da linguagem de script do HBase, podemos definir regras de negócios customizadas, revisão do Weibo, filtragem inteligente, etc. Quando um usuário envia um novo Weibo, o HBase pode determinar se ele pode ser publicado com base em regras personalizadas e pode até bloquear a propagação de spam em tempo real.

5. Resumo e perspectivas

Este artigo apresenta principalmente os princípios básicos, cenários de aplicação, conceitos básicos, princípios básicos, estrutura de índice, pesquisa de hotspot, sugestões de pesquisa, mecanismo de regras de negócios, etc. do HBase. Como uma nova era da tecnologia de armazenamento de big data, os sistemas de banco de dados distribuídos têm recursos exclusivos em computação distribuída, armazenamento massivo de dados, sistemas de arquivos distribuídos, fragmentação de dados e redundância de dados. Ao mesmo tempo, o HBase também está em constante desenvolvimento. Tecnologias como Apache Phoenix, Hive on HBase e Tephra podem aprimorar ainda mais as funções dos sistemas de banco de dados distribuídos. Por fim, o autor espera que este artigo possa inspirar os leitores a pensar e compreender melhor o HBase e sua aplicação nos motores de busca Weibo.

Acho que você gosta

Origin blog.csdn.net/universsky2015/article/details/133566260
Recomendado
Clasificación