12

Grüße,ZooKeeper und RabbitMQ/Qpid zusammen - Overkill oder eine gute Kombination?

Ich evaluiere einige Komponenten für ein verteiltes Multi-Data-Center-System. Wir werden Nachrichtenwarteschlangen verwenden (über RabbitMQ oder Qpid), sodass Agenten asynchrone Anforderungen an andere Agenten stellen können, ohne sich um Adressierung, Routing, Lastverteilung oder erneute Übertragung kümmern zu müssen.

In vielen Fällen interagieren die Agenten mit Komponenten, die nicht für hochgradig gleichzeitigen Zugriff ausgelegt sind, sodass eine Sperr- und Kreuzagentenkoordination erforderlich ist, um Race-Bedingungen zu vermeiden. Außerdem möchten wir, dass das System automatisch auf Fehler von Agenten oder Rechenzentren reagiert.

Mit den oben genannten Anwendungsfällen schien ZooKeeper wie es eine gute Passform sein könnte. Aber ich frage mich, ob der Versuch, ZK und Message Queuing zu verwenden, übertrieben ist. Es scheint so, als ob der Zookeeper könnte von meinem eigenen Cluster-Manager mit AMQP Messaging durchgeführt werden, aber das wäre schwer, wirklich richtig zu bekommen. Auf der anderen Seite habe ich einige Beispiele gesehen, wo ZooKeeper verwendet wurde, um Message Queuing zu implementieren, aber ich denke, dass RabbitMQ/Qpid dafür eher geeignet ist.

Hat jemand da draußen eine Kombination wie diese verwendet?

Vielen Dank im Voraus,

-Chris

+0

Hey Chris, hast du die Antwort auf diese Frage herausgefunden? Was hast du am Ende? Danke, Ilya – Ilya

+0

Dies sind wahrscheinlich einige der Beispiele, auf die Sie sich beziehen, indem Sie hier die Links für andere Benutzer hinzufügen: http: //www.cloudera.com/blog/2009/05/Erstellen-eine-verteilt-gleichzeitige-Warteschlange-mit-Apache-zookeeper/und http://zookeeper-user.578899.n2.nabble.com/Task-Job-distribution-using-ZooKeeper -td6096815.html – dgorissen

+0

Wir gingen mit Qpid für Messaging und haben die Implementierung eines verteilten Koordinationsdienstes wie ZooKeeper verschoben. Ich bin immer noch ein großer Fan von ZK, aber unser Durchsatz ist nicht hoch genug, um die zusätzliche Komplexität zu rechtfertigen. Wir betrachten einen einfachen verteilter Locking-Mechanismus innerhalb des Datenzentrums, der wahrscheinlich von MySQL oder Redis unterstützt wird. Die Straße hinunter können wir zu ZooKeeper graduieren. –

Antwort

4

Kommen in diese späten, aber vielleicht wird es von Nutzen sein. Die wichtigste Überlegung sollten die Leistungsmerkmale Ihres Systems sein. ZooKeeper, wie Sie sagten, ist mehr als fähig, ein Aufgabenverteilungssystem mit einer verteilten Warteschlange zu implementieren, aber zk ist derzeit mehr für Lesevorgänge als für Schreibvorgänge optimiert (dies kommt nur im Bereich von 1000 von Ops pro Sekunde ins Spiel) . Wenn Ihr Durchsatzbedarf geringer ist, würde die Verwendung von nur zk zur Implementierung Ihres Systems die Anzahl der Laufzeitkomponenten verringern und es einfacher machen. Natürlich sollten Sie Ihre Leistungstests immer vor der Entscheidung durchführen.

Verteilte Koordination ist wirklich schwer zu bekommen, so würde ich auf jeden Fall empfehlen, Zoowärter dafür zu verwenden und nicht Ihre eigenen rollen.

0

Nicht ganz sicher, was ZooKeeper genau ist, aber ich denke, dass eine Komponente von Apache (falls es Ihren Bedürfnissen gut passt), bevor die Verwaltung solche Dinge bevorzugt, als verteilte Synchronisation und Gruppendienste auf eigene Faust. Sie könnten natürlich ein Team von Entwicklern speziell für diesen Zweck einstellen, aber das garantiert Ihnen keine bessere Implementierung.

Ich schätze, dass es sowieso als separate Komponente implementiert wäre, da andere Wege viel Komplexität bringen und den Workflow verlangsamen könnten; also ist die Vorliebe von ZooKeeper oder etwas ähnliches (für mich) offensichtlich.

Und sicherlich, wenn Sie in der globalen Optimierungsphase Ihres Projekt-Workflow sind, denke ich, es wäre besser, RabbitMQ oder so zu verwenden (ich würde sogar betonen, dass cuz Implementierungen (vor allem kommerzielle) des AMQP wäre zuverlässiger als alles, was du dir ausgedacht hast).

Also würde ich für beide gehen, sorgfältig die entsprechenden Produkte von Drittanbietern auswählen, aber so viel von ihnen verwenden, wie es benötigt wird. Und das ist nur meine Meinung; Danke für das Lesen :)