Kurz gesagt hilft Ihnen ZooKeeper beim Aufbau verteilter Anwendungen.
Wie es funktioniert
Sie können ZooKeeper als einen replizierten Synchronisierungsdienst mit eventueller Konsistenz beschreiben. Es ist robust, da die persistierten Daten zwischen mehreren Knoten verteilt sind (diese Knotengruppe wird als "Ensemble" bezeichnet) und sich ein Client mit einem beliebigen davon verbindet (d.h. einem bestimmten "Server"), der migriert, wenn ein Knoten ausfällt; solange eine strenge Mehrheit der Knoten funktioniert, ist das Ensemble von ZooKeeper-Knoten aktiv. Insbesondere wird ein Masterknoten innerhalb des Ensembles durch Konsens dynamisch ausgewählt; wenn der Masterknoten ausfällt, migriert die Rolle des Masters zu einem anderen Knoten.
Wie Schreibvorgänge gehandhabt werden
Der Master ist die Autorität für Schreibvorgänge: Auf diese Weise können Schreibvorgänge garantiert in der Reihenfolge erhalten bleiben, d.h. Schreibvorgänge sind linear. Jedes Mal, wenn ein Client in das Ensemble schreibt, persistiert eine Mehrheit der Knoten die Informationen: Diese Knoten umfassen den Server für den Client und offensichtlich den Master. Dies bedeutet, dass jeder Schreibvorgang den Server auf den neuesten Stand mit dem Master bringt. Es bedeutet jedoch auch, dass keine gleichzeitigen Schreibvorgänge möglich sind.
Die Garantie für lineare Schreibvorgänge ist der Grund dafür, dass ZooKeeper für schreiblastige Workloads nicht gut geeignet ist. Insbesondere sollte es nicht für den Austausch großer Datenmengen wie Medien verwendet werden. Solange Ihre Kommunikation gemeinsame Daten beinhaltet, hilft Ihnen ZooKeeper. Wenn Daten gleichzeitig geschrieben werden könnten, hindert ZooKeeper tatsächlich, da es eine strenge Reihenfolge der Operationen auferlegt, auch wenn diese aus Sicht der Schreiber nicht unbedingt erforderlich ist. Sein idealer Einsatz liegt in der Koordination, bei der Nachrichten zwischen den Clients ausgetauscht werden.
Wie Lesevorgänge gehandhabt werden
Hierbei glänzt ZooKeeper: Lesevorgänge sind simultan, da sie vom spezifischen Server bedient werden, mit dem sich der Client verbindet. Dies ist jedoch auch der Grund für die eventuelle Konsistenz: Die "Ansicht" eines Clients kann veraltet sein, da der Master den entsprechenden Server mit einer begrenzten, aber undefinierten Verzögerung aktualisiert.
Im Detail
Die replizierte Datenbank von ZooKeeper besteht aus einem Baum von ZNodes, die Entitäten darstellen, die grob gesagt Dateisystemknoten darstellen (stellen Sie sie sich als Verzeichnisse vor). Jeder ZNode kann um einen Byte-Array erweitert werden, das Daten speichert. Außerdem kann jeder ZNode andere ZNodes unter sich haben, die praktisch ein internes Verzeichnissystem bilden.
Sequenzielle ZNodes
Interessanterweise kann der Name eines ZNodes "sequenziell" sein, was bedeutet, dass der Name, den der Client beim Erstellen des ZNodes angibt, nur ein Präfix ist: Der vollständige Name wird auch durch eine von dem Ensemble gewählte sequenzielle Nummer angegeben. Dies ist nützlich, zum Beispiel für Synchronisationszwecke: Wenn mehrere Clients einen Sperrmechanismus für eine Ressource möchten, können sie jeweils gleichzeitig einen sequenziellen ZNode an einem Ort erstellen: Derjenige mit der niedrigsten Nummer hat Anspruch auf die Sperre.
Ephemere ZNodes
Ein ZNode kann auch "ephemeral" sein: Dies bedeutet, dass er gelöscht wird, sobald der Client, der ihn erstellt hat, die Verbindung trennt. Dies ist hauptsächlich nützlich, um zu wissen, wann ein Client ausfällt, was relevant sein kann, wenn der Client selbst Verantwortlichkeiten hat, die von einem neuen Client übernommen werden sollen. Nehmen wir das Beispiel des Sperrmechanismus: Sobald der Client, der die Sperre hat, die Verbindung trennt, können die anderen Clients überprüfen, ob sie Anspruch auf die Sperre haben.
Watches
Das Beispiel der Client-Trennung kann problematisch sein, wenn der Zustand von ZNodes regelmäßig abgefragt werden muss. Glücklicherweise bietet ZooKeeper ein Ereignissystem, bei dem ein Watch auf einem ZNode gesetzt werden kann. Diese Watches können so eingestellt werden, dass ein Ereignis ausgelöst wird, wenn sich der ZNode gezielt ändert oder entfernt wird oder neue untergeordnete Elemente erstellt werden. Dies ist in Kombination mit den sequenziellen und ephemeren Optionen für ZNodes offensichtlich nützlich.
Wo und wie man es einsetzt
Ein klassisches Beispiel für die Verwendung von Zookeeper ist die verteilte Speicherberechnung, bei der einige Daten zwischen Clientknoten geteilt werden müssen und in einer sehr sorgfältigen Weise auf Synchronisierung zugegriffen/aktualisiert werden müssen.
ZooKeeper bietet die Bibliothek zur Konstruktion Ihrer Synchronisierungsprimitiven, während die Möglichkeit, einen verteilten Server auszuführen, das Problem des Single-Point-of-Failure vermeidet, das Sie bei der Verwendung eines zentralisierten (brokerähnlichen) Nachrichtenrepositorys haben.
ZooKeeper ist funktionsleicht, was bedeutet, dass Mechanismen wie Leader-Wahl, Sperren, Barrieren usw. nicht bereits vorhanden sind, aber über den ZooKeeper-Primitiven implementiert werden können. Falls die C/Java-API für Ihre Zwecke zu schwerfällig ist, sollten Sie auf Bibliotheken setzen, die auf ZooKeeper aufbauen, wie z. B. Cages und insbesondere Curator.
Wo man mehr lesen kann
Abgesehen von der offiziellen Dokumentation, die ziemlich gut ist, schlage ich vor, Kapitel 14 von Hadoop: The Definitive Guide zu lesen, das etwa 35 Seiten umfasst und im Wesentlichen erklärt, was ZooKeeper tut, gefolgt von einem Beispiel für einen Konfigurationsservice.
7 Stimmen
Ähnlich, aber nicht genau die Antwort, die Sie suchen: stackoverflow.com/questions/1479442/real-world-use-of-zookeeper
3 Stimmen
cloudera.com/blog/2009/05/… This translation will remain the same in German.
0 Stimmen
Du kannst dieses Papier lesen ZooKeeper: Wait-free coordination for Internet-scale systems Geschrieben von zwei Yahoo! Ingenieuren.
0 Stimmen
Hier ist ein Tech-Talk, der eine Einführung in Apache ZooKeeper ist von Camille Fournier, der CTO von RentTheRunway. Ich hoffe, es ist hilfreich.
0 Stimmen
@Luca Geretti...Nach meiner Meinung bietet Zookeeper eine Reihe von APIs, mit denen wir es nutzen können, um die verteilte Anwendung zu koordinieren. Bitte korrigiere mich, wenn ich falsch liege.
0 Stimmen
~58:00 Minuten Video.
0 Stimmen
Überprüfen Sie diesen Artikel: stackextend.com/zookeeper/…
0 Stimmen
Dieses 22-minütige Video erklärt sehr gut - youtube.com/watch?v=WlkqeSstV3c