ZooKeeper Alternativen? (Cluster-Koordinierungsdienst) [geschlossen]


72

ZooKeeper ist ein hochverfügbarer Koordinierungsdienst für Rechenzentren. Es entstand im Hadoop-Projekt. Darüber hinaus können Sperren, Failover, Führerwahlen, Gruppenmitgliedschaft und andere Koordinierungsprobleme implementiert werden. Gibt es Alternativen zu ZooKeeper? (freie Software natürlich)

Antworten:


53

Ich habe ausführlich auf Zookeeper / sah Kurator , Eureka , ETCD und Konsul. Zookeeper / Curator und Eureka sind in vielerlei Hinsicht die besten und am einfachsten zu integrierenden, wenn Sie sich in der Java-Welt befinden. Etcd ist ziemlich cool und sehr flexibel, aber es ist wirklich nur ein HA-Schlüsselspeicher, sodass Sie viel Code schreiben müssten, um daraus ein System zur Erkennung von Meinungen zu machen.

Der Konsul ist (für mich) das Beste aus beiden Welten. Es handelt sich um ein Service-Discovery-System mit einer Meinung, das auf Leibeigenen geschrieben ist und Floß für Cluster-Konsens und Klatsch für Kommunikation verwendet. Es stellt die Erkennungs- / Registrierungsendpunkte mit einer gut dokumentierten REST-API bereit und ermöglicht es Ihnen, Dienste mit DNS-SRV-Einträgen zu erkennen und Dienste mit Konfiguration zu registrieren (dh Sie können eine Datenbank oder Anwendung registrieren, in die Sie keinen Client integrieren können). oder wenn Sie nur Ihre Serviceerkennung von Ihrer App entkoppeln möchten)

Ich habe einen Blog-Beitrag über Konsul geschrieben, in dem Sie mehr erfahren und meine Demo zum Ausprobieren durchgehen können

Ich habe auch die Diensterkennung mit etcd & docker besprochen, wenn Sie mehr darüber erfahren möchten, wie dieser benutzerdefinierte Code aussehen könnte.

Eine letzte Sache! etcd & consul sind in go geschrieben, daher ist die Wartung viel einfacher als bei Java-Lösungen wie zookeeper. Alles was Sie brauchen ist die binäre Konsul / etcd. Keine Abhängigkeiten, keine verknüpften Bibliotheken, kein JVM.


26

Es gibt eine vielversprechende Alternative zu ZooKeeper namens etcd (github.com/coreos/etcd) , die vom CoreOS-Team geschrieben wurde. Im Gegensatz zu Doozerd wird etcd aktiv weiterentwickelt.


10

Ich habe gerade Accord (C) und OpenReplica / ConCoord (Python) entdeckt, die interessante Lösungen sein könnten

[EDIT] Die Hashicorp-Crew von Vagrant und Packer kocht "eine dezentrale Lösung für die Erkennung und Orchestrierung von Diensten" namens Serf .

[EDIT2] Hashicorp schlägt wieder zu! Sie haben gerade Consul veröffentlicht , der auf Serf aufgebaut ist. Der Pitch: "Eine Lösung für die Erkennung und Konfiguration von Diensten, vollständig verteilt, hochverfügbar, skalierbar auf Tausende von Knoten und Diensten über mehrere Rechenzentren hinweg".


1
Accord ist ein aufstrebendes Projekt für schreibintensive Lasten. Es verwendet CoroSync, das auch von Qpid verwendet wird und mit Linux HA verwendet werden kann.

8

Ja, es gibt auch Doozerd (https://github.com/ha/doozerd) . Schauen Sie es sich gut an, es ist ein netter, einzelner binärer verteilter Koordinierungsdienst, der von Heroku entwickelt wurde. Mit Bindungen / Bibliotheken für Java / Python / Ruby / Node. Sehr einfach zu beginnen und herumzuspielen.


6
Doozerd ist nett, aber es wird nicht gepflegt und hat keine Produktionsbilanz.


4

OpenReplica aus meiner Forschungsgruppe ist ein hochverfügbarer FOSS-Koordinierungsdienst für Rechenzentren. Es kann zur Implementierung von Sperren, Failover, Wahl von Führungskräften, Gruppenmitgliedschaft und anderen Koordinierungsdiensten verwendet werden. Es unterscheidet sich von ZooKeeper in zwei entscheidenden Punkten:

  • Es verwendet eine objektorientierte API. Dies erleichtert das Schreiben von Koordinierungsdiensten erheblich. Der Synchronisationscode für OpenReplica sieht genauso aus wie das Gegenstück zum Lehrbuch. Es ist nicht erforderlich, eine Datei und eine Upcall-basierte API wie in ZooKeeper und Chubby zu beherrschen.

  • Es ermöglicht dynamische Mitgliedschaftsaktualisierungen des Replikatsatzes. Es sind keine statischen Konfigurationsdateien erforderlich. Das System ist in DNS integriert (autorisierend, Slave für OpenReplica oder Amazon Route 53).

Wir unterstützen das System aktiv, zögern Sie nicht, uns zu informieren, wenn Sie weitere Fragen haben.


1) ZooKeeper ist objektorientiert, siehe zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html 2)? ZK ist im Grunde ein Femto-Dateisystem zum Speichern von Infrastruktur-Metadaten, das auch die Anwesenheitserkennung (kurzlebige Knoten) und Beobachter unterstützt.

Ich habe das Git-Repo gezogen und es scheint, dass das letzte Commit vom Mai ist. Hoffe du
hängst

Hallo Barry: ZooKeeper ist nicht objektorientiert. Die Hauptabstraktionen (Knoten, Pfade, Uhren) unterstützen die Wartung eines kleinen Objekts, und die API ist die eines Dateisystems. Wenn Sie sich OpenReplica genauer ansehen, sehen Sie, dass es einen großen Unterschied zwischen der Dateisystem-API von ZK und der OO-API von OpenReplica gibt. wizzard0: Wir leben und treten! Neuerscheinung für Anfang April geplant.
user1404662

1

Es gibt ein Projekt namens Noah auf Github, das interessant aussieht. Es besagt, dass es "lose auf Apache ZooKeeper basiert" https://github.com/lusis/Noah, wobei die REST-Unterstützung eine Schlüsselfunktion ist (ZK hat dies eher als Beitrag / Option als eingebaut).


2
Noah kann für Anwendungen nützlich sein, die keine hohe Verfügbarkeit erfordern oder bei denen die Arbeitsplatzsicherheit optional ist.

1

Es gibt verschiedene Tools, die für unterschiedliche technische Kompromisse optimiert sind.

  • ZooKeeper Skaliert geringfügig für Lesevorgänge; Das Schreiben mit vielen Beobachtern kann langsam sein. Es ist bewiesen und hat eine beträchtliche Gemeinschaft.
  • Accord scheint für schreibintensive Anwendungen interessant zu sein, typische Anwendungsfälle haben jedoch bereits domänenspezifische Lösungen (z. B. Protokollierung, Telemetrie).

Die anderen sind etwas interessant, aber im Allgemeinen nicht bewiesen. Verstehen Sie das nicht falsch, wenn es für die Produktion bestimmt ist.


1

Ich hatte diesen Vergleich von Zookeeper, etcd und Doozer gefunden: http://devo.ps/blog/zookeeper-vs-doozer-vs-etcd/

Serf (serfdom.io) ist auch eine schöne Lösung, da es einfach ist! Sie müssen jedoch berücksichtigen, dass SERF nur ein Cluster-Manager ist, mit dem Sie benutzerdefinierte Ereignisse an alle Clusterknoten senden können. Das ist schön, aber Sie müssen Ihre eigenen Shell-Skripte (auch bekannt als Events) schreiben. Siehe dieses Beispiel: " https://www.digitalocean.com/community/articles/how-to-set-up-a-serf-cluster-on-several-ubuntu-vps "

Der Vorteil ist, dass Sie einen sehr einfachen Cluster-Manager erhalten und diesen mit Ihrer bevorzugten Konfiguration, Bereitstellung oder kontinuierlichen Integration kombinieren können.



0

Ich weiß, dass dieser Beitrag ziemlich alt ist, aber jemand, der nach allen möglichen Alternativen sucht, möchte ich auch die JGroups-Bibliothek vorschlagen, die ausgereift genug ist, um in der Produktionsumgebung verwendet zu werden. Ich habe es in einem meiner Projekte erfolgreich verwendet, hauptsächlich zur verteilten Koordination und zum Austausch von Nachrichten zwischen Clustern. Zusätzlich zu seiner flexiblen Architektur, in der Sie den Stack anpassen können, um das zu erhalten, was Sie benötigen, unterstützt es auch die AWS-Unterstützung. Ich schlage vor, dass Sie es sich ansehen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.