Apache ZooKeeper ist ein Open-Source-System zur verteilten Koordination, das eine Plattform für Konfigurationsmanagement, Prozess-Synchronisation und Lock-Management bietet. Ursprünglich von Yahoo entwickelt, wird es heute von Apache gepflegt.
Apache ZooKeeper bietet außerdem eine hohe Verfügbarkeit und Ausfallsicherheit, was ihn zu einer zuverlässigen Lösung für große, verteilte Umgebungen macht. Tatsächlich kann er sehr hohe Arbeitslasten bewältigen und ist so konzipiert, dass er sich an immer komplexere Umgebungen anpassen kann.
In diesem Artikel werden wir versuchen, den Schleier über seiner Funktionsweise zu lüften und die Grundlagen zu verstehen.
Wie funktioniert Apache Zookeeper?
Décrivons dans un premier temps l’architecture de Apache ZooKeeper.
ZooKeeper folgt einer „Client-Server“-Architektur, bei der die Server die Knoten sind, die einen Dienst anbieten, und die Clients die Knoten sind, die diesen Dienst nutzen. Beschreiben wir jedes Element im obigen Diagramm.
- Ein Client bezieht sich auf eine Client-Anwendung, die Anfragen an die ZooKeeper-Server sendet, um Konfigurationen zu verwalten und verteilte Dienste zu synchronisieren. Sie können sich mit einem beliebigen Server verbinden, der die Anfrage an den entsprechenden Server weiterleitet.
- Ein Server ist ein Knoten im ZooKeeper-Cluster. Sie sind dafür verantwortlich, die eingehenden Anfragen zu verwalten, die Daten zu speichern und sie auf dem neuesten Stand zu halten. Server können sich gegenseitig replizieren, um eine hohe Verfügbarkeit zu gewährleisten.
- Ein Server wird zum Leader gewählt und ist dafür verantwortlich, die Replikationen des Ganzen zu koordinieren. Dieser Leader verwaltet also die Replikation der Daten und weist den verschiedenen Servern ihre Transaktionen zu. Wenn der Leader ausfällt, wird sofort ein anderer Server gewählt, der seinen Platz einnimmt und seine Aufgaben übernimmt.
- Ein Follower ist ein Knoten, der die Anweisungen des Anführers befolgt.
- Die Gesamtheit ist eine Gruppe von Apache ZooKeeper-Servern.
💡Auch interessant:
Apache Spark |
Apache Kafka |
Apache Cassandra |
Apache Schulung |
Apache Airflow |
Datenmodelle: Was ist das?
Apache ZooKeeper verwendet ein Datenmodell, das auf einer Knotenhierarchie basiert, die der Struktur eines Dateisystems ähnelt. So wird jeder Knoten durch einen eindeutigen Pfad in der Baumstruktur identifiziert.
Sie können Kinder haben, die in Wirklichkeit Knoten sind, die in der Hierarchie unterhalb des Elternknotens liegen. Diese Baumstruktur ermöglicht komplexe Datenstrukturen zur Darstellung von Informationen, die für die Koordination und Synchronisation von verteilten Anwendungen benötigt werden.
In Apache ZooKeeper wird jeder Knoten als Znode bezeichnet, und jeder Znode wird durch einen Namen identifiziert.
Jeder dieser Znode im Apache ZooKeeper-Datenmodell pflegt eine Stat-Struktur. Sie liefert einfach die Metadaten eines Znodes, die aus den folgenden Elementen bestehen:
- Die Versionsnummer erhöht sich jedes Mal, wenn sich die mit dem znode verbundenen Daten ändern. Dies ist wichtig, wenn mehrere Clients versuchen, Operationen auf demselben znode durchzuführen.
- ACLs (Zugriffskontrollen) fungieren als Authentifizierungsmechanismus für den Zugriff auf den Znode.
- Der Zeitstempel stellt die Zeit dar, die seit der Erstellung oder der letzten Änderung des znode verstrichen ist, dargestellt in Millisekunden. Diese Änderung wird anhand der Transaktionskennung (dem zxid) identifiziert.
- Diese zxid ist einzigartig und ermöglicht es, die zwischen mehreren Anfragen verstrichene Zeit leicht zu identifizieren.
- Die Datenlänge stellt die Gesamtmenge der in einem znode gespeicherten Daten dar. Es kann maximal 1 Megabyte an Daten gespeichert werden.
Welche verschiedenen Arten von Knoten gibt es?
Znodes können verschiedene Typen haben:
- Persistente Znodes: Diese Knoten existieren immer, auch wenn der Client, der diesen Znode erstellt hat, sich abgemeldet hat. Standardmäßig sind alle Znodes persistent, wenn nicht anders angegeben.
- Kurzlebige Znodes: Sie bleiben aktiv, solange der Client angemeldet ist. Sobald sich ein Client abmeldet, werden die kurzlebigen Znodes automatisch gelöscht. Aus diesem Grund können sie keine weiteren Kinder haben. Wenn ein Eintagsfliegen-Znode gelöscht wird, füllt der nächste geeignete Knoten seine Position aus. Sie spielen eine wichtige Rolle bei der Wahl des Anführers.
- Sequentieller Znode: Dieser letzte Znodentyp kann entweder dauerhaft oder kurzlebig sein. Wenn diese Art von Znode erstellt wird, legt ZooKeeper den Pfad des Znodes fest, indem er eine 10-stellige Sequenz an den ursprünglichen Namen anhängt. Wenn zum Beispiel ein Znode mit dem Pfad /myapp als sequentieller Znode erstellt wird, ändert ZooKeeper den Pfad in /myapp0000000001 und setzt die nächste Sequenznummer auf 0000000002. Für den Fall, dass 2 sequenzielle Znodes gleichzeitig erstellt werden, wird ZooKeeper niemals die gleiche Nummer für jeden Znode verwenden. Diese Art von Znode spielt eine wichtige Rolle beim Sperren und Synchronisieren.
Die Sitzungen
Dies ist ein sehr wichtiges Konzept für den Betrieb von Apache ZooKeeper. In regelmäßigen Abständen werden vom Client Heartbeats gesendet, um seine Sitzung aktiv zu halten. Wenn kein Heartbeat beim ZooKeeper ankommt, wird der Client als „tot“ betrachtet, was auch dazu führt, dass die kurzlebigen Znodes gelöscht werden.
Die Watches
Dieser Mechanismus ermöglicht es den Client, Benachrichtigungen über Änderungen im Zusammenhang mit dem Apache ZooKeeper-Set zu erhalten. Sie können Watches einstellen, wenn sie einen bestimmten Knoten abspielen, und diese Watches senden dem Client eine gespeicherte Benachrichtigung über jede Änderung des Knotens.
Fazit
Apache ZooKeeper ist ein verteiltes Koordinationssystem, das als eine einzige Einheit auftritt, hinter der sich jedoch ein ganzes komplexes System verbirgt. Der Apache ZooKeeper löst alle Probleme, die bei verteilten Anwendungen auftreten können, mit Hilfe seines Frameworks.
Da du nun alles über die Koordination und Synchronisation mit Apache ZooKeeper weißt, zögere nicht, dich für eine DataScientest-Schulung anzumelden, um mehr zu lernen. Entdecke unsere DataScientest-Kurse!