Spiegazione di Apache ZooKeeper


376

Sto cercando di capire ZooKeeper, come funziona e cosa fa. Esiste un'applicazione paragonabile a ZooKeeper?

Se lo sai, come descriveresti ZooKeeper a un laico?

Ho provato apache wiki, zookeeper sourceforge ... ma non sono ancora in grado di relazionarmi con esso.

Ho appena letto su http://zookeeper.sourceforge.net/index.sf.shtml , quindi non ci sono altri servizi come questo? È semplice come replicare un servizio server?


6
Simile ma non è la risposta esatta che stai cercando: stackoverflow.com/questions/1479442/real-world-use-of-zookeeper
zengr


Puoi leggere questo documento ZooKeeper: coordinamento senza attesa per sistemi su scala Internet Scritto da due Yahoo! ingegneri
yaphet

Ecco un discorso tecnico che è un'introduzione ad Apache ZooKeeper di Camille Fournier che è il CTO di RentTheRunway. Spero sia utile
Genadinik,

@Luca Geretti ... Secondo me, Zookeper fornisce una serie di API in modo che possiamo usarla per coordinare l'applicazione distribuita. correggimi se sbaglio.
user3797438

Risposte:


434

In poche parole, ZooKeeper ti aiuta a creare applicazioni distribuite.

Come funziona

È possibile descrivere ZooKeeper come un servizio di sincronizzazione replicato con eventuale coerenza. È robusto, poiché i dati persistenti sono distribuiti tra più nodi (questo insieme di nodi è chiamato "insieme") e un client si connette a uno di essi (ovvero un "server" specifico), migrando se un nodo fallisce; fintanto che una rigida maggioranza di nodi funziona, l'insieme di nodi ZooKeeper è attivo. In particolare, un nodo master viene scelto dinamicamente per consenso all'interno dell'ensemble; se il nodo principale ha esito negativo, il ruolo del master passa a un altro nodo.

Come vengono gestite le scritture

Il master è l'autorità per le scritture: in questo modo le scritture possono essere garantite come persistenti nell'ordine, cioè le scritture sono lineari . Ogni volta che un client scrive nell'insieme, la maggior parte dei nodi mantiene le informazioni: questi nodi includono il server per il client e ovviamente il master. Ciò significa che ogni scrittura rende il server aggiornato con il master. Significa anche, tuttavia, che non è possibile avere scritture simultanee.

La garanzia di scritture lineari è la ragione per cui ZooKeeper non funziona bene per i carichi di lavoro dominanti in scrittura. In particolare, non dovrebbe essere utilizzato per lo scambio di dati di grandi dimensioni, come i media. Finché la comunicazione coinvolge dati condivisi, ZooKeeper ti aiuta. Quando i dati possono essere scritti contemporaneamente, ZooKeeper si mette in mezzo, perché impone un rigoroso ordinamento delle operazioni anche se non strettamente necessario dal punto di vista degli autori. Il suo utilizzo ideale è per il coordinamento, in cui i messaggi vengono scambiati tra i client.

Come vengono gestite le letture

È qui che eccelle ZooKeeper: le letture sono simultanee poiché sono servite dal server specifico a cui si connette il client. Tuttavia, questo è anche il motivo dell'eventuale coerenza: la "vista" di un client potrebbe essere obsoleta, poiché il master aggiorna il server corrispondente con un ritardo limitato ma non definito.

In dettaglio

Il database replicato di ZooKeeper comprende un albero di znodi , che sono entità che rappresentano approssimativamente nodi di file system (pensate a loro come directory). Ogni znode può essere arricchito da una matrice di byte, che memorizza i dati. Inoltre, ogni znode può avere altri znodi sotto di esso, praticamente formando un sistema di directory interno.

Znodi sequenziali

È interessante notare che il nome di uno znode può essere sequenziale , il che significa che il nome fornito dal client durante la creazione dello znode è solo un prefisso: il nome completo è anche dato da un numero sequenziale scelto dall'ensemble. Ciò è utile, ad esempio, ai fini della sincronizzazione: se più client desiderano ottenere un blocco su una risorsa, possono creare contemporaneamente uno znode sequenziale in una posizione: chiunque ottenga il numero più basso ha diritto al blocco.

Znodi effimeri

Inoltre, uno znode può essere effimero : ciò significa che viene distrutto non appena il client che lo ha creato si disconnette. Ciò è utile soprattutto per sapere quando un cliente fallisce, il che può essere rilevante quando il cliente stesso ha delle responsabilità che dovrebbero essere assunte da un nuovo cliente. Prendendo l'esempio del blocco, non appena il client con il blocco si disconnette, gli altri client possono verificare se hanno diritto al blocco.

Orologi

L'esempio relativo alla disconnessione del client potrebbe essere problematico se avessimo bisogno di effettuare periodicamente il polling dello stato degli znodi. Fortunatamente, ZooKeeper offre un sistema di eventi in cui un orologio può essere impostato su uno znode. Questi orologi possono essere impostati per attivare un evento se lo znode viene specificamente modificato o rimosso o vengono creati nuovi bambini al suo interno. Ciò è chiaramente utile in combinazione con le opzioni sequenziali ed effimere per gli znodi.

Dove e come usarlo

Un esempio canonico dell'utilizzo di Zookeeper è il calcolo della memoria distribuita, in cui alcuni dati sono condivisi tra i nodi client e devono essere accessibili / aggiornati in modo molto accurato per tenere conto della sincronizzazione.

ZooKeeper offre la libreria per costruire le tue primitive di sincronizzazione, mentre la possibilità di eseguire un server distribuito evita il problema del singolo punto di errore che si ha quando si utilizza un repository di messaggi centralizzato (simile a un broker).

ZooKeeper è leggero, il che significa che meccanismi come elezione dei leader, serrature, barriere, ecc. Non sono già presenti, ma possono essere scritti sopra le primitive di ZooKeeper. Se l'API C / Java è troppo ingombrante per i tuoi scopi, dovresti fare affidamento su librerie costruite su ZooKeeper come gabbie e soprattutto curatore .

Dove leggere di più

A parte la documentazione ufficiale, che è abbastanza buona, suggerisco di leggere il capitolo 14 di Hadoop: The Definitive Guide che ha ~ 35 pagine che spiegano essenzialmente cosa fa ZooKeeper, seguito da un esempio di un servizio di configurazione.


2
Non sono sicuro di comprendere lo schema di comunicazione che stai suggerendo, ma puoi utilizzare ZooKeeper per "pubblicare" informazioni da un produttore e far leggere a molti consumatori. Se d'altra parte esiste solo un'istanza di ogni tipo di server, ci sono pochi vantaggi nell'uso di ZK.
Luca Geretti,

57
IMO questo non riesce a spiegare cosa ZooKeeper è per un laico. Quando avrei bisogno di ZooKeeper? Cosa gli scriverei? Che problema risolve? È un archivio di valori-chiave? Un motore di ricerca? Un lucchetto distribuito? Perché dovrei scegliere ZooKeeper ad esempio Redis o un file o JIRA o post-it? Sai chiaramente molto su ZooKeeper - ma puoi spiegarlo meno tecnicamente?
Dan Passaro,

1
Poiché Zookeeper ha scritture lineari, ciò non mi impedisce di utilizzare le API asincrone per creare nodi e accettare la risposta in una richiamata? Anche se internamente potrebbe non consentire scritture simultanee o mi sto perdendo qualcosa?
jdk2588,

1
"Ogni volta che un client scrive nell'insieme, la maggior parte dei nodi mantiene le informazioni: questi nodi includono il server per il client e ovviamente il master" => potresti indicarmi un documento. o qualcosa in cui questo è spiegato? Mi chiedo se è possibile che sia stato effettuato con successo un cambio di stato escludendo il server a cui è collegato il client (nel qual caso, il client può sperimentare lo strano comportamento di non essere in grado di leggere la propria scrittura per un momento)
senseiwu,

2
Completamente e totalmente antitetico alla domanda posta. Se fosse un orologio, sarebbe alla ricerca di un "dispositivo per il mantenimento del tempo", non una descrizione della molla principale, del treno delle ruote, dello scappamento e della loro interazione in base al periodo di oscillazione, al momento di inerzia e all'impatto dei cristalli di zaffiro artificiali.
Rick O'Shea,

10

Zookeeper è uno dei migliori server e servizi open source che aiuta a coordinare in modo affidabile i processi distribuiti. Zookeeper è un sistema CP (consultare il teorema di CAP) che fornisce tolleranza di coerenza e partizione. La replica dello stato di Zookeeper su tutti i nodi lo rende un servizio distribuito alla fine coerente.

Inoltre, ogni nuovo leader eletto aggiornerà i suoi seguaci con proposte mancanti o con un'istantanea dello stato, se i seguaci mancano molte proposte.

Zookeeper fornisce anche un'API che è molto facile da usare. Questo post sul blog, esempi di API Java di Zookeeper , contiene alcuni esempi se si cercano esempi.

Quindi dove lo usiamo? Se il tuo servizio distribuito richiede una gestione della configurazione centralizzata, affidabile e coerente, blocchi, code ecc., Troverai Zookeeper una scelta affidabile.


4
"Zookeeper è un sistema CP (fare riferimento al teorema della PAC) che fornisce coerenza e tolleranza alle partizioni", penso che Zookeeper abbia padrone e seguaci, quando il padrone giù, quindi uno dei seguaci sarebbe eletto come Leader, quindi Zookeeper dovrebbe fornire il AP, tuttavia la C alla fine è coerente.
YuFeng Shen,

5
In termini di teorema della CAP, "C" in realtà significa linearizzabilità. ZooKeeper infatti fornisce "coerenza sequenziale" e significa che gli aggiornamenti dei client verranno applicati nell'ordine in cui sono stati ricevuti. Questo è più debole della linearità ma è ancora molto forte, molto più forte della "eventuale coerenza". Zookeeper non è A e questo perché se il leader non può essere eletto (nessun quorum) allora lo zookeeper fallirà le richieste. Questo è il motivo per cui non è altamente disponibile.
Binu George,

7

Capisco ZooKeeper in generale, ma ho avuto problemi con i termini "quorum" e "split brain", quindi forse posso condividere le mie scoperte con te (mi considero anche un laico).

Diciamo che abbiamo un cluster ZooKeeper di 5 server. Uno dei server diventerà il leader e gli altri diventeranno follower.

  • Questi 5 server formano un quorum. Quorum significa semplicemente "questi server possono votare su chi dovrebbe essere il leader".

  • Quindi il voto si basa sulla maggioranza. Maggioranza significa semplicemente "più della metà", quindi più della metà del numero di server deve concordare che un server specifico diventi il ​​leader.

  • Quindi c'è questa brutta cosa che può accadere chiamata "split brain". Un cervello diviso è semplicemente questo, per quanto ho capito: il cluster di 5 server si divide in due parti, o chiamiamolo "team server", con forse una parte di 2 e l'altra di 3 server. Questa è davvero una brutta situazione, come se entrambi i "team server" dovessero eseguire un ordine specifico come decideresti quale team dovrebbe essere preferito? Potrebbero aver ricevuto informazioni diverse dai clienti. Quindi è davvero importante sapere quale "team server" è ancora rilevante e quale si può / dovrebbe essere ignorato.

  • La maggioranza è anche il motivo per cui dovresti usare un numero dispari di server. Se hai 4 server e un cervello diviso in cui 2 server separati, entrambi i "team server" potrebbero dire "ehi, vogliamo decidere chi è il leader!" ma come dovresti decidere quali 2 server dovresti scegliere? Con 5 server è semplice: il team di server con 3 server ha la maggioranza e può selezionare il nuovo leader.

  • Anche se hai solo 3 server e uno di questi fallisce, gli altri 2 formano comunque la maggioranza e possono concordare sul fatto che uno di loro diventerà il nuovo leader.

Mi rendo conto che una volta che ci pensi un po 'e capisci i termini non è più così complicato. Spero che questo aiuti anche chiunque a comprendere questi termini.


1

Zookeeper è un server open source centralizzato per la gestione e la gestione delle informazioni di configurazione, convenzioni di denominazione e sincronizzazione per l'ambiente cluster distribuito. Zookeeper aiuta i sistemi distribuiti a ridurre la loro complessità di gestione fornendo bassa latenza e alta disponibilità. Zookeeper era inizialmente un sottoprogetto per Hadoop ma ora è un progetto indipendente di alto livello di Apache Software Foundation.

Maggiori informazioni


2
Cosa ti fa dire che Zookeeper è centralizzato? Zookeeper può e deve essere eseguito distribuito.
Benjamin Hammer Nørgaard,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.