Technologieaustausch

Das zugrunde liegende Prinzip von Zookeeper

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ZooKeeper ist ein hochverfügbarer verteilter Koordinationsdienst, der in verteilten Systemen häufig verwendet wird, um das Konsistenzproblem verteilter Systeme zu lösen. Im Folgenden werden die zugrunde liegenden Prinzipien von ZooKeeper ausführlich vorgestellt, einschließlich Architektur, Datenmodell, Kernmechanismus und Konsistenzprotokoll.

1. Architektur

ZooKeeper verwendet eine Master-Slave-Architektur, die normalerweise aus einem Leader und mehreren Followern besteht. Es gibt auch Observer-Knoten als nicht stimmberechtigte Knoten, um den Druck von Leseanforderungen zu teilen.

  • Führer: Verantwortlich für die Bearbeitung aller Schreibanfragen (Transaktionsanfragen) und die Koordination des Konsistenzprotokolls.
  • Anhänger: Nehmen Sie an Abstimmungen teil, synchronisieren Sie den Leader-Status und bearbeiten Sie Leseanfragen.
  • Beobachter: Nimmt nicht an Abstimmungen teil, verarbeitet nur Leseanfragen und leitet Schreibanfragen von Clients weiter.

2. Datenmodell

ZooKeeper speichert Daten in einer Baumstruktur ähnlich einem Dateisystem, und jeder Knoten wird als Znode bezeichnet.

  • znode: Datenknoten mit Pfad-, Daten- und Statusinformationen.
  • Persistenter Knoten: Ein Knoten überlebt eine Client-Trennung, sofern er nicht explizit gelöscht wird.
  • Vergänglicher Knoten: Der Knoten wird automatisch gelöscht, wenn der Client die Verbindung trennt.
  • Sequentielle Knoten: Dem Knoten wird beim Erstellen automatisch eine aufsteigende Sequenznummer angehängt.

3. Kernmechanismus

3.1. Sitzungsverwaltung

Zwischen jedem Client und dem ZooKeeper-Cluster wird eine Sitzung eingerichtet, um den Verbindungsstatus aufrechtzuerhalten und temporäre Knoten zu verwalten. ZooKeeper erkennt den Verbindungsstatus des Clients über den Heartbeat-Mechanismus. Wenn innerhalb eines bestimmten Zeitraums kein Heartbeat empfangen wird, gilt die Sitzung als getrennt.

3.2. Datensynchronisierung

Um die Datenkonsistenz jedes Knotens sicherzustellen, verwendet ZooKeeper einen Datensynchronisierungsmechanismus. Wenn der Leader-Knoten eine Schreibanforderung verarbeitet, sendet er den Änderungsvorgang an alle Follower-Knoten. Der Follower-Knoten bestätigt, nachdem er den Änderungsvorgang akzeptiert hat, und der Leader-Knoten entscheidet letztendlich, ob der Änderungsvorgang erfolgreich ist.

3.3. Benachrichtigungsmechanismus

ZooKeeper unterstützt den Watch-Mechanismus. Wenn sich die Daten oder untergeordneten Knoten des Znodes ändern, benachrichtigt ZooKeeper den Client.

4. Konsistenzprotokoll

ZooKeeper verwendet ein Konsistenzprotokoll namens ZAB (Zookeeper Atomic Broadcast), um die Datenkonsistenz sicherzustellen. ZAB besteht aus zwei Phasen: der Wahlphase und der Sendephase.

4.1. Wahlphase

Wenn der ZooKeeper-Cluster startet oder der Leader-Knoten ausfällt, ist eine Wahl erforderlich, um einen neuen Leader zu bestimmen. Die Wahlphase gliedert sich im Wesentlichen in die folgenden Schritte:

  1. Abstimmung: Alle Knoten stimmen für sich selbst und senden Stimmen an andere Knoten.
  2. Stimmen erhalten: Jeder Knoten erhält Stimmen von anderen Knoten und zählt die Abstimmungsergebnisse.
  3. Umfrage aktualisieren: Wenn es in den erhaltenen Stimmen einen Kandidaten gibt, der mehr Stimmen hat als Sie selbst, aktualisieren Sie Ihre Stimme für diesen Kandidaten.
  4. Leiter bestimmen: Wenn ein Kandidat mehr als die Hälfte der Stimmen erhält, wird er neuer Vorsitzender.
4.2. Sendephase

Nachdem der Leader ermittelt wurde, tritt die Broadcast-Phase ein. Der Leader ist für die Verarbeitung der Schreibanforderung des Clients und die Übertragung des Änderungsvorgangs an alle Follower-Knoten verantwortlich. Konkrete Schritte sind wie folgt:

  1. Vorschlag: Nach Erhalt der Schreibanforderung generiert der Leader einen Vorschlag und sendet den Vorschlag an alle Follower-Knoten.
  2. bestätigen: Nach Erhalt des Vorschlags führt der Follower-Knoten eine Protokollierung durch und sendet eine Bestätigungsnachricht an den Leader.
  3. einreichen: Nachdem der Leader-Knoten mehr als die Hälfte der Bestätigungsnachrichten erhalten hat, übermittelt er den Vorschlag und benachrichtigt alle Follower-Knoten über das Übermittlungsergebnis.
  4. Änderungen übernehmen: Nachdem der Follower-Knoten die Festschreibungsbenachrichtigung erhalten hat, wendet er den Änderungsvorgang an.

5. Beispielcode

Das Folgende ist ein einfaches Beispiel für die Verwendung von ZooKeeper, das zeigt, wie Knoten erstellt, Knotendaten gelesen und Watch registriert werden.

5.1. Einführung von Abhängigkeiten

existieren pom.xml Einführung der ZooKeeper-Client-Abhängigkeit.

 

xmlCode kopieren