Estou tentando entender o ZooKeeper, como ele funciona e o que faz. Existe algum aplicativo comparável ao ZooKeeper?
Se você souber, como descreveria o ZooKeeper a um leigo?
Eu tentei o apache wiki, zookeeper sourceforge ... mas ainda não consigo me relacionar com ele.
Acabei de ler http://zookeeper.sourceforge.net/index.sf.shtml , então não existem mais serviços como este? É tão simples quanto replicar um serviço de servidor?
apache-zookeeper
distributed-computing
topgun_ivard
fonte
fonte
Respostas:
Em poucas palavras, o ZooKeeper ajuda a criar aplicativos distribuídos.
Como funciona
Você pode descrever o ZooKeeper como um serviço de sincronização replicado com consistência eventual. É robusto, uma vez que os dados persistentes são distribuídos entre vários nós (esse conjunto de nós é chamado de "conjunto") e um cliente se conecta a qualquer um deles (ou seja, um "servidor" específico), migrando se um nó falhar; Enquanto a maioria estrita dos nós estiver funcionando, o conjunto de nós do ZooKeeper estará ativo. Em particular, um nó principal é escolhido dinamicamente por consenso dentro do conjunto; se o nó principal falhar, a função de mestre será migrada para outro nó.
Como as gravações são tratadas
O mestre é a autoridade para gravações: dessa maneira, pode-se garantir que as gravações sejam mantidas em ordem, ou seja, gravações são lineares . Cada vez que um cliente grava no conjunto, a maioria dos nós persiste as informações: esses nós incluem o servidor para o cliente e, obviamente, o mestre. Isso significa que cada gravação atualiza o servidor com o mestre. Isso também significa, no entanto, que você não pode ter gravações simultâneas.
A garantia de gravações lineares é a razão do fato de o ZooKeeper não ter um bom desempenho para cargas de trabalho dominantes na gravação. Em particular, não deve ser usado para intercâmbio de dados grandes, como mídia. Desde que sua comunicação envolva dados compartilhados, o ZooKeeper o ajudará. Quando os dados podem ser gravados simultaneamente, o ZooKeeper realmente atrapalha, porque impõe uma ordem estrita de operações, mesmo que não seja estritamente necessário da perspectiva dos escritores. Seu uso ideal é para coordenação, onde as mensagens são trocadas entre os clientes.
Como as leituras são tratadas
É aqui que o ZooKeeper se destaca: as leituras são simultâneas, pois são atendidas pelo servidor específico ao qual o cliente se conecta. No entanto, esse também é o motivo da consistência eventual: a "visualização" de um cliente pode estar desatualizada, pois o mestre atualiza o servidor correspondente com um atraso limitado mas indefinido.
Em detalhe
O banco de dados replicado do ZooKeeper compreende uma árvore de znodes , que são entidades que representam aproximadamente os nós do sistema de arquivos (pense neles como diretórios). Cada znode pode ser enriquecido por uma matriz de bytes, que armazena dados. Além disso, cada znode pode ter outros znodes, praticamente formando um sistema de diretório interno.
Znodes sequenciais
Curiosamente, o nome de um znode pode ser seqüencial , o que significa que o nome que o cliente fornece ao criar o znode é apenas um prefixo: o nome completo também é fornecido por um número sequencial escolhido pelo conjunto. Isso é útil, por exemplo, para fins de sincronização: se vários clientes desejam obter um bloqueio em um recurso, cada um pode criar simultaneamente um znode seqüencial em um local: quem obtém o número mais baixo tem direito ao bloqueio.
Znodes efêmeros
Além disso, um znode pode ser efêmero : isso significa que é destruído assim que o cliente que o criou se desconecta. Isso é útil principalmente para saber quando um cliente falha, o que pode ser relevante quando o próprio cliente tem responsabilidades que devem ser assumidas por um novo cliente. Tomando o exemplo do bloqueio, assim que o cliente com o bloqueio for desconectado, os outros clientes poderão verificar se têm direito ao bloqueio.
Relógios
O exemplo relacionado à desconexão do cliente pode ser problemático se for necessário pesquisar periodicamente o estado dos znodes. Felizmente, o ZooKeeper oferece um sistema de eventos em que um relógio pode ser configurado em um znode. Esses relógios podem ser configurados para acionar um evento se o znode for especificamente alterado ou removido ou se novos filhos forem criados sob ele. Isso é claramente útil em combinação com as opções seqüenciais e efêmeras para znodes.
Onde e como usá-lo
Um exemplo canônico do uso do Zookeeper é o cálculo da memória distribuída, onde alguns dados são compartilhados entre os nós do cliente e devem ser acessados / atualizados de uma maneira muito cuidadosa para considerar a sincronização.
O ZooKeeper oferece a biblioteca para construir suas primitivas de sincronização, enquanto a capacidade de executar um servidor distribuído evita o problema de ponto único de falha que você possui ao usar um repositório de mensagens centralizado (semelhante a um broker).
O ZooKeeper é leve, o que significa que mecanismos como eleição do líder, bloqueios, barreiras etc. ainda não estão presentes, mas podem ser escritos acima das primitivas do ZooKeeper. Se a API C / Java for muito pesada para seus propósitos, você deve confiar em bibliotecas criadas no ZooKeeper, como gaiolas e, principalmente, curador .
Onde ler mais
Além da documentação oficial, o que é bastante bom, sugiro ler o Capítulo 14 do Hadoop: O Guia Definitivo, que possui ~ 35 páginas explicando essencialmente o que o ZooKeeper faz, seguido de um exemplo de serviço de configuração.
fonte
O Zookeeper é um dos melhores servidores e serviços de código aberto que ajuda a coordenar de forma confiável os processos distribuídos. O Zookeeper é um sistema CP (consulte o Teorema do CAP) que fornece tolerância de consistência e partição. A replicação do estado do Zookeeper em todos os nós o torna um serviço distribuído eventualmente consistente.
Além disso, qualquer líder recém-eleito atualizará seus seguidores com propostas ausentes ou com um instantâneo do estado, se houver muitas propostas faltando.
O Zookeeper também fornece uma API muito fácil de usar. Esta postagem no blog, exemplos da API Java do Zookeeper , tem alguns exemplos, se você estiver procurando por exemplos.
Então, onde usamos isso? Se o seu serviço distribuído precisar de um gerenciamento de configuração centralizado, confiável e consistente, bloqueios, filas etc., você encontrará o Zookeeper uma opção confiável.
fonte
Eu entendo o ZooKeeper em geral, mas tive problemas com os termos "quorum" e "cérebro dividido", para que talvez eu possa compartilhar minhas descobertas com você (considero-me também um leigo).
Digamos que temos um cluster do ZooKeeper de 5 servidores. Um dos servidores se tornará o líder e os outros se tornarão seguidores.
Esses 5 servidores formam um quorum. Quorum significa simplesmente "esses servidores podem votar em quem deve ser o líder".
Portanto, a votação é baseada na maioria. Maioria significa simplesmente "mais da metade", portanto mais da metade do número de servidores deve concordar que um servidor específico se torne o líder.
Portanto, existe essa coisa ruim que pode acontecer chamada "cérebro dividido". Um cérebro dividido é simplesmente isso, pelo que entendi: o cluster de 5 servidores se divide em duas partes, ou vamos chamá-lo de "equipes de servidores", com talvez uma parte de 2 e a outra de 3 servidores. Esta é realmente uma situação ruim, como se ambas as "equipes de servidores" precisassem executar uma ordem específica. Como você decidiria qual equipe deveria ser preferida? Eles podem ter recebido informações diferentes dos clientes. Portanto, é realmente importante saber qual "equipe do servidor" ainda é relevante e qual pode / deve ser ignorada.
Maioria também é a razão pela qual você deve usar um número ímpar de servidores. Se você tem 4 servidores e um cérebro dividido em que 2 servidores separados, as duas "equipes de servidores" podem dizer "ei, queremos decidir quem é o líder!" mas como você deve decidir quais 2 servidores deve escolher? Com 5 servidores, é simples: a equipe de servidores com 3 servidores tem a maioria e pode selecionar o novo líder.
Mesmo que você tenha apenas 3 servidores e um deles falhe, os outros 2 ainda formam a maioria e podem concordar que um deles se tornará o novo líder.
Percebo que depois de pensar um pouco e entender os termos, não é mais tão complicado. Espero que isso também ajude alguém a entender esses termos.
fonte
O Zookeeper é um servidor de código aberto centralizado para manter e gerenciar informações de configuração, convenções de nomenclatura e sincronização para o ambiente em cluster distribuído. O Zookeeper ajuda os sistemas distribuídos a reduzir sua complexidade de gerenciamento, fornecendo baixa latência e alta disponibilidade. O Zookeeper foi inicialmente um subprojeto do Hadoop, mas agora é um projeto independente de nível superior da Apache Software Foundation.
Mais Informações
fonte
Eu sugeriria os seguintes recursos:
Eu sugeriria assistir ao vídeo, ler o jornal e assistir ao vídeo novamente. Seria mais fácil entender se você conhece o Raft de antemão.
fonte