Die flinke Feder

Das Computer-Parlament

Bernd Fondermann

Hat sich die Occupy-Bewegung schon in Ihrem Rechenzentrum breitgemacht? Oder herrschen in Ihrem Maschinenpark die dedizierten-Singleton-Diktatoren? Oder einfacher gefragt: Ist bei Ihnen schon die Rechner-Demokratie eingekehrt? Stellen wir uns eine Welt vor, in der Rechner-Verbünde in Eintracht ihren Vorsitzenden wählen und wie in einem echten – beziehungsweise idealen – Parlament ständig miteinander reden, ausgewogene Entscheidungen treffen und korrupte Vorsitzende abwählen. Eine Utopie? Schauen wir uns zunächst Apache Zookeeper näher an.

Wenn man von der Seite draufschaut, erkennt man erstmal nichts Neues: Zookeeper [1] sieht wie ein einfaches LDAP aus. Es gibt eine Directory-Hierarchie in der man Daten lesen und schreiben kann. Interessant wird es aus einem anderen Blickwinkel. Im Produktivbetrieb wird man mindestens drei Zookeeper-Instanzen als Ensemble laufen lassen, besser aber fünf oder mehr. Diese reden ständig miteinander und kontrollieren sich gegenseitig. Außerdem bestimmen sie aus ihrer Mitte ihren „Vorsitzenden“, den Master. Sobald der Master nicht mehr erreichbar ist, wählen die verbleibenden Instanzen einen neuen. Kommt der alte Master zurück, muss er sich als normaler, stimmberechtigter „Abgeordneter“ ins Cluster-Plenum einreihen. Was ist die Aufgabe des Masters?

Er fungiert als Transaktionsbarriere. D. h., er koordiniert alle Schreiboperationen und hat die „Richtlinienkompetenz“, indem er bestimmt, welches der aktuell gültige Zustand der von Zookeeper gehaltenen Daten ist. Er ist die Referenz für alle Instanzen, die sich regelmäßig über den Master synchronisieren. Für Lese- und Schreiboperationen wenden Nutzer des Clusters, also „der einfache Bürger“, sich an beliebige Instanzenknoten des Clusters. Im Idealfall ist das eine Instanz „im selben Wahlkreis“, d. h. auf demselben Rechner oder „möglichst nah“. Ein Zookeeper-Cluster ist sehr robust. Es eignet sich für alle klassischen Koordinierungsaufgaben. Es kann Fragen beantworten wie:

  • Welche der beiden gespiegelten Datenbanken ist gerade für Schreibaktionen aktiv, welche auf Standby?
  • Welchen Wert hat ein globaler Zähler?
  • Welchen Server muss ich kontaktieren, um an eine Konfiguration zu kommen?
  • Was ist die nächste Nachricht, die für mich hinterlegt ist?
  • Ist es derzeit erlaubt in einen bestimmten Datenspeicher zu schreiben?

Um mitzukriegen, wann sich Antworten auf solche Fragen ändern, ist es dem Zookeeper-Nutzer möglich, sich auf Zustandsänderungen zu abonnieren. Er wird dann automatisch über eine Callback-Methode zurückgerufen, wenn ein Knoten verschwunden oder hinzugekommen ist, oder seinen Zustand geändert hat. Auf diesem Weg, dem klassischen Publish/Subscribe, können Applikationen einfach lose miteinander kommunizieren.

Das interne Datenmodell von Zookeeper besteht aus „znodes“. Ein znode ist nicht zu verwechseln mit den Computern, die das Cluster selber bilden und ebenfalls als Knoten bezeichnet werden. Jeder Zookeeper-Knoten speichert und serviert alle znodes. Jeder znode hat einen Namen, der den Unix-Pfad-Konventionen folgt, also z. B. „/javamagazin/2012/02/flinkefeder“, der also ein String ist. Über diesen Namen wird auch die znode-Hierarchie abgebildet. Neben dem Namen hat ein Knoten noch einen Wert, repräsentiert als einfaches Byte-Array. Die Länge von Namen und Wert sollte mit Bedacht gewählt sein, da jeder geänderte znode beim Sync über das Netzwerk zu allen Knoten transportiert werden muss. Bis auf die Tatsache, dass jede Zookeeper-Maschine einen eindeutigen DNS-Namen haben muss, ist es sehr einfach aufzusetzen und zu betreiben. Eine Shell bietet schnellen demokratischen Zugang zum Zookeeper-Ensemble. Auch das Programmier-API ist recht schlank.

Zookeeper hat Unterstützer im ganzen Spektrum der freien Software. Akka [2], die beliebte Actor-Pattern-Implementierung auf der JVM arbeitet unter der Haube mit Zookeeper. Apache HBase [3], die Hadoop-Datenbank wäre ohne Zookeeper nicht mehrheitsfähig. Für den Suchserver Apache Solr [4] wird Zookeeper in der kommenden Cloud-Edition (voraussichtlich Release 4.0) die Koordination übernehmen. Auch neo4j [5] nutzt für High Availability Zookeeper. Deswegen: Machen Sie mit! Machen Sie Ihr nächstes Download-Kreuzchen bei der ZOO-Partei!

Bernd Fondermann (bernd@zillion-one.com) ist freiberuflicher Softwarearchitekt und Consultant in Frankfurt a. M. und Member der Apache Software Foundation. Er beschäftigt sich mit innovativen Open-Source-Technologien wie Apache Hadoop oder Lucene und bietet unter zillion-one.com einen Big Data Hosting Service an.
Geschrieben von
Bernd Fondermann
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.