Hallo zusammen, in diesem Video geht es darum, welche Funktionalitäten Apache Zookeeper,
das uns als Vorbild für die Übungsaufgabe dient, anbietet.
Anschließend werfen wir noch einen kurzen Blick auf die Übungsaufgabe, gefolgt von
ein paar Hinweisen zur Implementierung.
Zookeeper ist ein Koordinierungsdienst, der ursprünglich von der Forschungsabteilung
von Yahoo!
entwickelt wurde und seit einigen Jahren als Apache-Project zur Verfügung steht.
So ein Koordinierungsdienst ist, wenig überraschend, dazu da, um Dienste zu koordinieren.
Zum Beispiel kann ein Anführer für einen anderen Dienst bestimmt werden und falls dieser
Anführer dann ausfällt, lässt sich mit Hilfe von Zookeeper ein neuer Anführer bestimmen.
Das kann unter anderem von HTFS genutzt werden, um einen ausgefallenen Namedo zu ersetzen.
Eine andere Möglichkeit ist das Zookeeper zum konsistenten Speichern von Konfigurationsdaten
zu verwenden.
Das wird beispielsweise bei Apache Kafka gemacht. Das dient dazu, um Ereignisdatenströme
hin und her zu übertragen und das nutzt Zookeeper, um zu speichern, welche Server aktuell für
welchen Datenstrom zuständig sind.
Zum Schweichern von Daten bietet Zookeeper einen hierarchischen Namensraum an.
Dieser besteht aus Knoten mit Kindknoten, die wiederum selbst Kindknoten enthalten können
und so weiter.
Insgesamt ergibt sich damit dann eine Baumstruktur.
Jeder Knoten darin ist eindeutig über einen Pfad identifizierbar und kann Nutztat enthalten.
Für den Fall, dass mehrere Clients gleichzeitig schreiben wollen, gibt es anstelle von Logs
die Möglichkeit, bedingte Schreiboperationen zu verwenden.
Und Zookeeper bietet außerdem Garantien über die Verarbeitungsreihenfolge von Operationen.
Das kann man dann dazu nutzen, um Schreibzugriffe von Clients zu koordinieren.
Da ein Koordinierungsdienst oft ein zentraler Bestandteil der Infrastruktur ist, dessen
Ausfall alles Mögliche beeinträchtigen könnte, ist Zookeeper fehlerteuernd ausgelegt.
Dazu wird der Dienst auf mehrere Rechner, so garantiert Replikate repliziert, so dass
einzelne davon dann auch ohne Probleme ausfallen können und der Dienst einfach weiterläuft.
Damit entsteht allerdings das Problem, dass deren Daten konsistent gehalten werden müssen.
Zookeeper verwendet dazu einen passiven Replikation genannten Ansatz, bei dem effektiv ein Anführerrechner
bestimmt, was die aktuellen Daten sind und die dann konsistent auf den anderen Rechner
repliziert.
Außerdem verwendet Zookeeper eine Leseoptimierung, die es jedem Replikat und nicht nur dem Anführer
erlaubt, auf Leseanfragen zu antworten.
Mehr dazu und zu den Auswirkungen davon erkläre ich im Video konsistente Replikation.
Zu Zookeeper gibt es auch ein Paper namens Zookeeper Weight-Free Coordination for Internet
Scale Systems, das unter anderem auch wesentlich mehr Dateils dazu enthält, was man mit Zookeeper
alles machen kann.
Im Folgenden werde ich hauptsächlich nur auf die für uns im Rahmen der Übungsaufgabe
relevanten Funktionalitäten von Zookeeper eingehen.
Zum Bearbeiten von Knoten bietet Zookeeper einige Operationen an, von denen die meisten
wenig überraschend sind.
Mittels Create und Delete lassen sich Knoten erstellen bzw. wieder löschen.
Exist dient dazu, um zu prüfen, ob ein Knoten bereits existiert.
Per SetData und GetData lassen sich die Nutz- und Metadaten eines Knoten setzen oder eben
auslesen.
Und die Kinder eines Knotens bekommt man per GetChilder.
Eine Besonderheit ist die Sync-Operation, die mit der Leseroptimierung zusammenhängt
und die es einem erlaubt, darauf zu warten, dass alle zeitlich vorangegangenen Schreiboperationen
Presenters
Michael Eischer
Zugänglich über
Offener Zugang
Dauer
00:12:13 Min
Aufnahmedatum
2021-01-19
Hochgeladen am
2021-01-19 11:09:35
Sprache
de-DE
Beschreibung der Funktionen von ZooKeeper und der Übungsaufgabe.