Ich versuche ZooKeeper zu verstehen, wie es funktioniert und was es tut. Gibt es eine Anwendung, die mit ZooKeeper vergleichbar ist?
Wenn Sie wissen, wie würden Sie ZooKeeper dann einem Laien beschreiben?
Ich habe Apache Wiki, Zookeeper SourceForge ausprobiert ... aber ich kann mich immer noch nicht darauf beziehen.
Ich habe gerade http://zookeeper.sourceforge.net/index.sf.shtml gelesen. Gibt es also nicht mehr Dienste wie diesen? Ist es so einfach wie das Replizieren eines Serverdienstes?
apache-zookeeper
distributed-computing
topgun_ivard
quelle
quelle
Antworten:
Kurz gesagt, ZooKeeper hilft Ihnen beim Erstellen verteilter Anwendungen.
Wie es funktioniert
Sie können ZooKeeper als replizierten Synchronisierungsdienst mit eventueller Konsistenz beschreiben. Es ist robust, da die persistierten Daten auf mehrere Knoten verteilt werden (dieser Knotensatz wird als "Ensemble" bezeichnet) und ein Client eine Verbindung zu einem dieser Knoten herstellt (dh zu einem bestimmten "Server") und migriert, wenn ein Knoten ausfällt. Solange eine strikte Mehrheit der Knoten funktioniert, lebt das Ensemble der ZooKeeper-Knoten. Insbesondere wird ein Hauptknoten dynamisch durch Konsens innerhalb des Ensembles ausgewählt; Wenn der Masterknoten ausfällt, wird die Rolle des Masters auf einen anderen Knoten migriert.
Wie Schreibvorgänge behandelt werden
Der Master ist die Autorität für Schreibvorgänge: Auf diese Weise kann garantiert werden, dass Schreibvorgänge in der angegebenen Reihenfolge beibehalten werden, dh Schreibvorgänge sind linear . Jedes Mal, wenn ein Client in das Ensemble schreibt, behalten die meisten Knoten die Informationen bei: Diese Knoten enthalten den Server für den Client und natürlich den Master. Dies bedeutet, dass jeder Schreibvorgang den Server mit dem Master auf den neuesten Stand bringt. Dies bedeutet jedoch auch, dass Sie nicht gleichzeitig schreiben können.
Die Garantie für lineares Schreiben ist der Grund dafür, dass ZooKeeper bei schreibdominanten Workloads keine gute Leistung erbringt. Insbesondere sollte es nicht für den Austausch großer Datenmengen wie Medien verwendet werden. Solange Ihre Kommunikation gemeinsame Daten umfasst, hilft Ihnen ZooKeeper. Wenn Daten gleichzeitig geschrieben werden könnten, stört ZooKeeper tatsächlich, da es eine strikte Reihenfolge der Vorgänge vorschreibt, auch wenn dies aus Sicht der Autoren nicht unbedingt erforderlich ist. Die ideale Verwendung ist die Koordination, bei der Nachrichten zwischen den Clients ausgetauscht werden.
Wie Lesevorgänge behandelt werden
Hier zeichnet sich ZooKeeper aus: Lesevorgänge werden gleichzeitig ausgeführt, da sie von dem bestimmten Server bereitgestellt werden, mit dem der Client eine Verbindung herstellt. Dies ist jedoch auch der Grund für die eventuelle Konsistenz: Die "Ansicht" eines Clients ist möglicherweise veraltet, da der Master den entsprechenden Server mit einer begrenzten, aber nicht definierten Verzögerung aktualisiert.
Im Detail
Die replizierte Datenbank von ZooKeeper besteht aus einem Baum von Knoten , bei denen es sich um Entitäten handelt , die ungefähr Dateisystemknoten darstellen (stellen Sie sich diese als Verzeichnisse vor). Jeder Knoten kann durch ein Byte-Array angereichert werden, in dem Daten gespeichert werden. Außerdem kann jeder Znode andere Znodes enthalten, die praktisch ein internes Verzeichnissystem bilden.
Sequentielle Knoten
Interessanterweise kann der Name eines Znodes fortlaufend 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 vom Ensemble ausgewählte fortlaufende Nummer angegeben. Dies ist beispielsweise für Synchronisierungszwecke nützlich: Wenn mehrere Clients eine Sperre für eine Ressource erhalten möchten, können sie gleichzeitig einen sequentiellen Knoten an einem Speicherort erstellen: Wer die niedrigste Nummer erhält, hat Anspruch auf die Sperre.
Vergängliche Knoten
Ein znode kann auch kurzlebig sein : Dies bedeutet, dass er zerstört 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. Dies kann relevant sein, wenn der Client selbst Verantwortlichkeiten hat, die von einem neuen Client übernommen werden sollten. Am Beispiel der Sperre können die anderen Clients prüfen, ob sie Anspruch auf die Sperre haben, sobald der Client die Sperre aufhebt.
Uhren
Das Beispiel für die Trennung von Clients kann problematisch sein, wenn der Status von znodes regelmäßig abgefragt werden muss. Glücklicherweise bietet ZooKeeper ein Ereignissystem an, bei dem eine Uhr auf einen Knoten gesetzt werden kann. Diese Uhren können so eingestellt werden, dass sie ein Ereignis auslösen, wenn der Knoten speziell geändert oder entfernt wird oder neue untergeordnete Knoten darunter erstellt werden. Dies ist eindeutig in Kombination mit den sequentiellen und kurzlebigen Optionen für Knoten nützlich.
Wo und wie man es benutzt
Ein kanonisches Beispiel für die Verwendung von Zookeeper ist die Berechnung des verteilten Speichers, bei der einige Daten von Clientknoten gemeinsam genutzt werden und auf sehr sorgfältige Weise zugegriffen / aktualisiert werden muss, um die Synchronisation zu berücksichtigen.
ZooKeeper bietet die Bibliothek zum Erstellen Ihrer Synchronisationsprimitive, während durch die Möglichkeit, einen verteilten Server auszuführen, das Single-Point-of-Failure-Problem vermieden wird, das bei Verwendung eines zentralen (Broker-ähnlichen) Nachrichtenrepositorys auftritt.
ZooKeeper ist Feature-Light, was bedeutet, dass Mechanismen wie Führerwahlen, Sperren, Barrieren usw. nicht bereits vorhanden sind, sondern über den ZooKeeper-Grundelementen geschrieben werden können. Wenn die C / Java-API für Ihre Zwecke zu unhandlich ist, sollten Sie sich auf Bibliotheken verlassen, die auf ZooKeeper basieren, z. B. Käfige und insbesondere Kuratoren .
Wo kann man mehr lesen?
Abgesehen von der offiziellen Dokumentation, die ziemlich gut ist, empfehle ich, Kapitel 14 von Hadoop: The Definitive Guide zu lesen, das auf ~ 35 Seiten im Wesentlichen erklärt, was ZooKeeper tut, gefolgt von einem Beispiel eines Konfigurationsdienstes.
quelle
Zookeeper ist einer der besten Open Source-Server und -Dienste, mit denen verteilte Prozesse zuverlässig koordiniert werden können. Zookeeper ist ein CP-System (siehe CAP-Theorem), das Konsistenz- und Partitionstoleranz bietet. Die Replikation des Zookeeper-Status über alle Knoten hinweg macht ihn zu einem letztendlich konsistenten verteilten Dienst.
Darüber hinaus wird jeder neu gewählte Führer seine Anhänger mit fehlenden Vorschlägen oder mit einer Momentaufnahme des Staates aktualisieren, wenn den Anhängern viele Vorschläge fehlen.
Zookeeper bietet auch eine API, die sehr einfach zu bedienen ist. Dieser Blog-Beitrag, Zookeeper Java API-Beispiele , enthält einige Beispiele, wenn Sie nach Beispielen suchen.
Wo verwenden wir das? Wenn Ihr verteilter Dienst ein zentrales, zuverlässiges und konsistentes Konfigurationsmanagement, Sperren, Warteschlangen usw. benötigt, ist Zookeeper eine zuverlässige Wahl.
quelle
Ich verstehe den ZooKeeper im Allgemeinen, hatte aber Probleme mit den Begriffen "Quorum" und "Split Brain", sodass ich meine Erkenntnisse vielleicht mit Ihnen teilen kann (ich betrachte mich auch als Laie).
Angenommen, wir haben einen ZooKeeper-Cluster mit 5 Servern. Einer der Server wird zum Anführer und die anderen zu Followern.
Diese 5 Server sind beschlussfähig. Quorum bedeutet einfach "diese Server können darüber abstimmen, wer der Anführer sein soll".
Die Abstimmung basiert also auf der Mehrheit. Mehrheit bedeutet einfach "mehr als die Hälfte", daher muss mehr als die Hälfte der Anzahl der Server zustimmen, damit ein bestimmter Server zum Marktführer wird.
Es gibt also diese schlimme Sache, die als "gespaltenes Gehirn" bezeichnet werden kann. Ein geteiltes Gehirn ist einfach so weit, wie ich es verstehe: Der Cluster von 5 Servern teilt sich in zwei Teile, oder nennen wir es "Serverteams", mit vielleicht einem Teil von 2 und dem anderen von 3 Servern. Dies ist wirklich eine schlechte Situation, da beide "Serverteams" einen bestimmten Auftrag ausführen müssen. Wie würden Sie entscheiden, welches Team bevorzugt werden soll? Sie haben möglicherweise unterschiedliche Informationen von den Kunden erhalten. Es ist also sehr wichtig zu wissen, welches "Serverteam" noch relevant ist und welches ignoriert werden kann / sollte.
Die Mehrheit ist auch der Grund, warum Sie eine ungerade Anzahl von Servern verwenden sollten. Wenn Sie 4 Server und ein geteiltes Gehirn haben, in dem 2 Server getrennt sind, könnten beide "Serverteams" sagen: "Hey, wir wollen entscheiden, wer der Anführer ist!" Aber wie sollten Sie entscheiden, welche 2 Server Sie wählen sollten? Mit 5 Servern ist es einfach: Das Serverteam mit 3 Servern hat die Mehrheit und darf den neuen Leiter auswählen.
Selbst wenn Sie nur 3 Server haben und einer von ihnen ausfällt, bilden die anderen 2 immer noch die Mehrheit und können zustimmen, dass einer von ihnen der neue Anführer wird.
Mir ist klar, dass es nicht mehr so kompliziert ist, wenn man einmal darüber nachdenkt und die Begriffe versteht. Ich hoffe, dies hilft auch jedem, diese Begriffe zu verstehen.
quelle
Zookeeper ist ein zentraler Open-Source-Server zum Verwalten und Verwalten von Konfigurationsinformationen, Namenskonventionen und Synchronisieren für verteilte Clusterumgebungen. Zookeeper hilft den verteilten Systemen, ihre Verwaltungskomplexität zu reduzieren, indem es eine geringe Latenz und hohe Verfügbarkeit bietet. Zookeeper war ursprünglich ein Teilprojekt für Hadoop, jetzt ist es ein unabhängiges Projekt der Apache Software Foundation auf höchster Ebene.
Mehr Informationen
quelle
Ich würde folgende Ressourcen vorschlagen:
Ich würde vorschlagen, das Video anzuschauen, die Zeitung zu lesen und das Video dann erneut anzuschauen. Es wäre einfacher zu verstehen, wenn Sie Raft vorher kennen.
quelle