Apache Zookeeper – Hosts koordiniert verwalten
ZooKeeper ist ein verteilter Koordinierungsdienst zur Verwaltung einer großen Anzahl von Hosts. Das Koordinieren und Verwalten eines Dienstes in einer verteilten Umgebung ist ein komplizierter Prozess. ZooKeeper löst dieses Problem mit seiner einfachen Architektur und API. Mit ZooKeeper können sich Entwickler auf die Kernanwendungslogik konzentrieren, ohne sich um die Verteilung der Anwendung sorgen zu müssen.
ZooKeeper begann in Yahoo
Das ZooKeeper-Framework wurde ursprünglich bei “Yahoo!” für den einfachen und robusten Zugriff auf Anwendungen genutzt. Später wurde Apache ZooKeeper zum Standard für organisierte Dienste, die von Hadoop, HBase und anderen verteilten Frameworks verwendet werden. Beispielsweise verwendet Apache HBase ZooKeeper, um den Status verteilter Daten zu verfolgen.
Verteilte Anwendung
Eine verteilte Anwendung kann gleichzeitig auf mehreren Systemen in einem Netzwerk ausgeführt werden, indem sie sich untereinander koordiniert, um eine bestimmte Aufgabe schnell und effizient zu erledigen. Normalerweise können komplexe und zeitaufwändige Aufgaben, deren Ausführung durch eine nicht verteilte Anwendung (die in einem einzelnen System ausgeführt wird) Stunden in Anspruch nehmen. ZooKeeper erledigt die verteilten Anwendung in Minuten, indem die Rechenfunktionen des gesamten beteiligten Systems genutzt werden.
Die Zeit zum Ausführen der Aufgabe kann weiter reduziert werden, indem die verteilte Anwendung so konfiguriert wird, dass sie auf mehreren Systemen ausgeführt wird. Eine Gruppe von Systemen, auf denen eine verteilte Anwendung ausgeführt wird, wird als Cluster bezeichnet, und jeder in einem Cluster betriebene Computer wird als Knoten bezeichnet.
Eine verteilte Anwendung besteht aus zwei Teilen: Server- und Clientanwendung.
- Serveranwendungen sind tatsächlich verteilt und verfügen über eine gemeinsame Schnittstelle, sodass Clients eine Verbindung zu jedem Server im Cluster herstellen und so das gleiche Ergebnis erzielen können.
- Clientanwendungen sind die Werkzeuge für die Interaktion mit einer verteilten Anwendung.
Vorteile verteilter Anwendungen
- Zuverlässigkeit – Der Ausfall eines einzelnen oder einiger weniger Systeme führt nicht zum Ausfall des gesamten Systems.
- Skalierbarkeit – Die Leistung kann bei Bedarf erhöht werden, indem weitere Computer mit geringfügigen Änderungen in der Konfiguration der Anwendung ohne Ausfallzeiten hinzugefügt werden.
- Transparenz – Blendet die Komplexität des Systems aus und zeigt sich als eine Einheit / Anwendung.
Herausforderungen verteilter Anwendungen
- Race Condition – Zwei oder mehr Rechner, die versuchen, eine bestimmte Aufgabe auszuführen, die zu einem bestimmten Zeitpunkt aber nur von einer einzelnen Maschine ausgeführt werden muss. Beispielsweise sollten gemeinsam genutzte Ressourcen zu einem bestimmten Zeitpunkt nur von einem einzelnen Computer geändert werden.
- Deadlock – Zwei oder mehr Vorgänge, die darauf warten, dass sie auf unbestimmte Zeit abgeschlossen werden.
- Inkonsistenz – Teilweiser Datenfehler.
Wofür ist Apache ZooKeeper gedacht?
Apache ZooKeeper ist ein Dienst, der von einem Cluster (einer Gruppe von Knoten) verwendet wird. Sinn ist die Koordination untereinander und die Nutzung gemeinsamer Daten, die mit robusten Synchronisationstechniken verwaltet werden. ZooKeeper ist selbst eine verteilte Anwendung, die Dienste zum Schreiben einer verteilten Anwendung bereitstellt.
Die allgemeinen Dienste von ZooKeeper sind:
- Namensdienst – Identifizieren der Knoten in einem Cluster anhand des Namens. Ähnlich wie DNS, jedoch speziell für Knoten konfiguriert.
- Konfigurationsverwaltung – Aktuelle Konfigurationsinformationen des Systems für einen Verbindungsknoten.
- Clusterverwaltung – Beitreten / Verlassen eines Knotens in einem Cluster und Knotenstatus in Echtzeit.
- Führerwahl – Wahl eines Knotens als Führer zu Koordinierungszwecken.
- Sperr- und Synchronisierungsdienst – Sperren der Daten beim Ändern. Dieser Mechanismus hilft bei der automatischen Fehlerbehebung, während zugleich andere verteilte Anwendungen wie Apache HBase verbunden werden.
- Hochzuverlässige Datenregistrierung – Verfügbarkeit von Daten, selbst wenn ein oder mehrere Knoten ausgefallen sind.
Verteilte Anwendungen bieten viele Vorteile, werfen jedoch auch einige komplexe und schwer zu knackende Herausforderungen auf. Das ZooKeeper-Framework bietet einen vollständigen Mechanismus, um alle Herausforderungen zu bewältigen. Race Condition und Deadlock werden mithilfe eines ausfallsicheren Synchronisationsansatzes behandelt. Ein weiterer Hauptnachteil ist die Inkonsistenz der Daten, die ZooKeeper mit Atomizität auflöst.
Vorteile von ZooKeeper
Die Vorteile von Apache ZooKeeper sind offensichtlich:
- Einfacher, verteilter Koordinierungsprozess
- Synchronisation – Gegenseitiger Ausschluss und Zusammenarbeit zwischen Serverprozessen. Dieser Prozess hilft in Apache HBase bei der Konfigurationsverwaltung.
- Serialisierung – Daten werden nach bestimmbaren Regeln codiert. So lässt sich sicherstellen, dass die Anwendung konsistent ausgeführt wird. Dieser Ansatz kann in MapReduce verwendet werden, um die Warteschlange zu koordinieren und laufende Threads auszuführen.
- Verlässlichkeit / Atomizität – Die Datenübertragung ist entweder erfolgreich oder schlägt vollständig fehl, aber keine Transaktion ist teilweise.
Fazit
Soll eine große Anzahl von Hosts administrativ auch dann problemlos weiterarbeiten, wenn ein oder mehrere Knoten ausfallen, dann ist ZooKeeper der Schutz und die Lösung.