Zookeeper - Visão geral
ZooKeeper é um serviço de coordenação distribuído para gerenciar um grande conjunto de hosts. Coordenar e gerenciar um serviço em um ambiente distribuído é um processo complicado. O ZooKeeper resolve esse problema com sua arquitetura simples e API. O ZooKeeper permite que os desenvolvedores se concentrem na lógica do aplicativo central sem se preocupar com a natureza distribuída do aplicativo.
A estrutura ZooKeeper foi construída originalmente em “Yahoo!” para acessar seus aplicativos de maneira fácil e robusta. Mais tarde, o Apache ZooKeeper se tornou um padrão para serviço organizado usado por Hadoop, HBase e outras estruturas distribuídas. Por exemplo, o Apache HBase usa o ZooKeeper para rastrear o status dos dados distribuídos.
Antes de prosseguirmos, é importante que saibamos algumas coisas sobre aplicativos distribuídos. Portanto, vamos começar a discussão com uma visão geral rápida dos aplicativos distribuídos.
Aplicativo Distribuído
Um aplicativo distribuído pode ser executado em vários sistemas em uma rede em um determinado momento (simultaneamente), coordenando-se entre si para concluir uma tarefa específica de maneira rápida e eficiente. Normalmente, tarefas complexas e demoradas, que levarão horas para serem concluídas por um aplicativo não distribuído (rodando em um único sistema), podem ser feitas em minutos por um aplicativo distribuído usando recursos de computação de todo o sistema envolvido.
O tempo para concluir a tarefa pode ser reduzido ainda mais configurando o aplicativo distribuído para ser executado em mais sistemas. Um grupo de sistemas em que um aplicativo distribuído está sendo executado é chamado deCluster e cada máquina em execução em um cluster é chamada de Node.
Um aplicativo distribuído tem duas partes, Server e Clientinscrição. Os aplicativos de servidor são realmente distribuídos e têm uma interface comum para que os clientes possam se conectar a qualquer servidor no cluster e obter o mesmo resultado. Os aplicativos cliente são as ferramentas para interagir com um aplicativo distribuído.
Benefícios de aplicativos distribuídos
Reliability - A falha de um ou alguns sistemas não faz com que todo o sistema falhe.
Scalability - O desempenho pode ser aumentado conforme e quando necessário, adicionando mais máquinas com pequenas alterações na configuração do aplicativo, sem tempo de inatividade.
Transparency - Esconde a complexidade do sistema e se mostra como uma única entidade / aplicação.
Desafios de aplicativos distribuídos
Race condition- Duas ou mais máquinas tentando realizar uma tarefa específica, que na verdade precisa ser feita apenas por uma única máquina em um determinado momento. Por exemplo, recursos compartilhados só devem ser modificados por uma única máquina a qualquer momento.
Deadlock - Duas ou mais operações aguardando a conclusão uma da outra indefinidamente.
Inconsistency - Falha parcial de dados.
O que é o Apache ZooKeeper?
Apache ZooKeeper é um serviço usado por um cluster (grupo de nós) para coordenar entre si e manter dados compartilhados com técnicas de sincronização robustas. O próprio ZooKeeper é um aplicativo distribuído que fornece serviços para escrever um aplicativo distribuído.
Os serviços comuns fornecidos pelo ZooKeeper são os seguintes -
Naming service- Identificar os nós em um cluster por nome. É semelhante ao DNS, mas para nós.
Configuration management - Informações de configuração mais recentes e atualizadas do sistema para um nó de junção.
Cluster management - Entrada / saída de um nó em um cluster e status do nó em tempo real.
Leader election - Eleger um nó como líder para fins de coordenação.
Locking and synchronization service- Bloquear os dados enquanto os modifica. Esse mecanismo ajuda na recuperação automática de falhas enquanto conecta outros aplicativos distribuídos como o Apache HBase.
Highly reliable data registry - Disponibilidade de dados mesmo quando um ou alguns nós estão inativos.
Os aplicativos distribuídos oferecem muitos benefícios, mas também apresentam alguns desafios complexos e difíceis de superar. A estrutura do ZooKeeper fornece um mecanismo completo para superar todos os desafios. A condição de corrida e o impasse são tratados usandofail-safe synchronization approach. Outra desvantagem principal é a inconsistência de dados, que o ZooKeeper resolve comatomicity.
Benefícios do ZooKeeper
Aqui estão os benefícios de usar o ZooKeeper -
Simple distributed coordination process
Synchronization- Exclusão mútua e cooperação entre processos de servidor. Este processo ajuda no Apache HBase para gerenciamento de configuração.
Ordered Messages
Serialization- Codifique os dados de acordo com regras específicas. Certifique-se de que seu aplicativo seja executado de forma consistente. Esta abordagem pode ser usada no MapReduce para coordenar a fila para executar threads em execução.
Reliability
Atomicity - A transferência de dados é bem-sucedida ou falha completamente, mas nenhuma transação é parcial.