Compartilhamento de tecnologia

O princípio subjacente do Zookeeper

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ZooKeeper é um serviço de coordenação distribuída altamente disponível amplamente utilizado em sistemas distribuídos para resolver o problema de consistência de sistemas distribuídos. A seguir serão apresentados em detalhes os princípios subjacentes do ZooKeeper, incluindo sua arquitetura, modelo de dados, mecanismo central e protocolo de consistência.

1. Arquitetura

O ZooKeeper adota uma arquitetura mestre-escravo, que geralmente consiste em um Líder e vários Seguidores. Existem também nós Observadores como nós sem direito a voto para compartilhar a pressão das solicitações de leitura.

  • Líder: Responsável por lidar com todas as solicitações de gravação (solicitações de transação) e coordenar o protocolo de consistência.
  • Seguidor: participe da votação e sincronize o status do Líder e processe solicitações de leitura.
  • Observador: Não participa da votação, apenas processa solicitações de leitura e encaminha solicitações de gravação dos clientes.

2. Modelo de dados

O ZooKeeper armazena dados em uma estrutura de árvore semelhante a um sistema de arquivos, e cada nó é chamado de znode.

  • nó z: Nó de dados com informações de caminho, dados e status.
  • Znode persistente: um nó sobrevive a uma desconexão do cliente, a menos que seja explicitamente excluído.
  • Nó efêmero: o nó é excluído automaticamente quando o cliente se desconecta.
  • Znode sequencial: o nó é automaticamente anexado a um número de sequência crescente quando é criado.

3. Mecanismo central

3.1. Gerenciamento de sessão

Uma sessão é estabelecida entre cada cliente e o cluster ZooKeeper para manter o estado da conexão e gerenciar nós temporários. O ZooKeeper detecta o status da conexão do cliente por meio do mecanismo de pulsação. Se nenhuma pulsação for recebida dentro de um determinado período de tempo, a sessão será considerada desconectada.

3.2. Sincronização de dados

Para garantir a consistência dos dados de cada nó, o ZooKeeper adota um mecanismo de sincronização de dados. Quando o nó Líder processa uma solicitação de gravação, ele enviará a operação de alteração a todos os nós Seguidores. O nó Seguidor confirmará após aceitar a operação de alteração e o nó Líder decidirá, em última instância, se a operação de alteração foi bem-sucedida.

3.3. Mecanismo de notificação

ZooKeeper suporta o mecanismo Watch. O cliente pode registrar Watch no znode especificado. Quando os dados ou nós filhos do znode mudam, o ZooKeeper notificará o cliente.

4. Protocolo de consistência

O ZooKeeper usa um protocolo de consistência chamado ZAB (Zookeeper Atomic Broadcast) para garantir a consistência dos dados. O ZAB consiste em duas fases: a fase eleitoral e a fase de transmissão.

4.1. Fase eleitoral

Quando o cluster ZooKeeper é iniciado ou o nó Líder falha, uma eleição é necessária para determinar um novo Líder. A fase eleitoral é dividida principalmente nas seguintes etapas:

  1. voto: Todos os nós votam em si mesmos e enviam votos para outros nós.
  2. receber votos: Cada nó recebe votos de outros nós e conta os resultados da votação.
  3. Atualizar enquete: Se houver um candidato com votos superiores a você nos votos recebidos, atualize seu voto para esse candidato.
  4. Determinar o líder: Quando um candidato recebe mais da metade dos votos, ele se torna o novo Líder.
4.2. Fase de transmissão

Após a determinação do Líder, entra-se na fase de transmissão. O Líder é responsável por processar a solicitação de gravação do cliente e transmitir a operação de mudança para todos os nós Seguidores. As etapas específicas são as seguintes:

  1. proposta: Após receber a solicitação de gravação, o Líder gera uma proposta e a envia para todos os nós Seguidores.
  2. confirme: Após receber a proposta, o nó Seguidor realiza o log e envia uma mensagem de confirmação ao Líder.
  3. enviar: após o nó Líder receber mais da metade das mensagens de confirmação, ele envia a proposta e notifica todos os nós Seguidores sobre o resultado do envio.
  4. Aplicar mudanças: após o nó Seguidor receber a notificação de commit, ele aplica a operação de mudança.

5. Exemplo de código

A seguir está um exemplo simples usando o ZooKeeper, mostrando como criar nós, ler os dados do nó e registrar o Watch.

5.1.Introduzindo dependências

existir pom.xml Apresente a dependência do cliente ZooKeeper.

 

xmlCopiar código