2013-03-19 8 views
6

Bevor ich das Rad neu erfinde, suche ich nach Zeigern zu Open-Source-Projekten, die diese Anforderungen erfüllen.Suche nach persistent, verteilt, worker queue für erlang

  • in erlang implementiert obwohl gehen oder C sind möglich, wenn es nicht zu viel Gepäck ist (zB. Verdrehen Labyrinth von Abhängigkeiten)
  • Endpunkt oder Client in erlang (zB: I erlang Code wollen ausgeführt werden, wenn ich die Jobs mache.)
  • verteilen Sie Jobs auf Knoten, und rufen Sie eine Erlang-Funktion auf, um die Jobs auszuführen.
  • bestehen die Jobs irgendwie
  • keinen Master-Knoten, keinen Single Point of Failure
  • homogene Architektur
  • eine Warteschlange von Jobs verwalten, die auf dem Boden ohne Abwurf Arbeitsplätze gesichert bekommen können
  • ein Job sein getan mehr als einmal ist ok
  • Betriebsprofile wie Riak oder Couchbase (zB:. einen Knoten starten, dann die andere beginnen und sie darauf zeigen)

Stro ng Präferenz für etwas Leichtes. Es gibt eine Menge überteuerter Unternehmenslösungen in Erlang, die so lange brauchen, um zu lernen, wie es für mich wäre, dies von Grund auf neu zu erstellen (tatsächlich habe ich im Grunde genommen eine Lösung für dieses Problem als Antwort auf jemanden entwickelt sonst die Frage hier auf Stackoverflow kann ich bauen, was ich beschrieben, aber dies scheint wie ein jene Bedürfnisse, die direkt in der Mitte von dem, was erlang entworfen wurde)

Was ich in Betracht gezogen habe.. - ejabbered - mehr eines Messaging-Framework - Rabitmq - theoretisch tut dies aber jedes Mal, wenn ich auf ihre Website gehe ertrinken in einem Meer von Abstraktionen. Es scheint bereit zu sein, alles zu tun. Ich kann nicht einmal sagen, ob es irgendeine Art von Ausdauer hat.

Bearbeiten zu hinzufügen: Hier ist eine Folie Deck auf verteilte Verriegelung mit Schließfach. Scheint, wie es einen wichtigen Teil des Problems löst http://www.slideshare.net/knutnesheim/locker-distributed-consistent-locking

Weitere Edit (wenn man will, um ihre eigene Rolle.): Ich suche etwas leichter als RabbitMQ wirklich. Ich weiß, dass es tun kann, was ich will, aber es scheint, als wären die Kosten beim Lernen vergleichbar mit den Kosten, es selbst zu tun, wo am Ende die benutzerdefinierte Lösung näher an dem wäre, was ich wirklich brauche.

Antwort

1

Wir verwenden RabbitMQ für solche Aufgaben. RabbitMQ Exchange-Queue-Binding-Modell unterstützt flexible Konfiguration. Sie veröffentlichen an einer Vermittlungsstelle, die Bindung stellt sicher, dass die Nachrichten in die Warteschlange (n) gelangen. Ein oder mehrere Worker-Prozesse können eine Warteschlange abonnieren. Warteschlangen und Austausch können dauerhaft sein. Manche Leute sagen, dass es ungefähr ein halbes Jahr dauert, um RabbitMQ vollständig zu verstehen.

+0

Ein halbes Jahr, um zu verstehen, RabbitMQ ist viel länger als der Monat oder so Ich denke, es würde mich brauchen, um meine eigene Lösung zu bauen, die ich von Anfang an vollständig verstehen würde. Ich denke, das ist meine Sorge mit RabbitMQ. Es tut alles und ist "Enterprise grade", hat aber auch eine steile Lernkurve. Gut zu wissen, dass es tun kann, was ich brauche, ich werde ein bisschen mehr Nachforschungen anstellen, um zu sehen, ob ich herausfinden kann, wie ich weitermachen und es für meine Bedürfnisse einrichten kann. – nirvana

+1

Versuchen Sie RabbitMQ. Sie werden viel mehr davon bekommen als mit Ihrer eigenen Lösung. – Tilman

+1

Learning RabbitMQ sollte viel weniger als das Rollen Ihrer eigenen sein. Wichtige Teile -> Austausch an Warteschlangen binden. Nachrichten werden in Exchange-Nachrichten veröffentlicht, die in die gebundenen Warteschlangen übertragen werden. Warteschlangen sind, wo Sie die Nachrichten mit Verbrauchern erhalten. Es gibt eine Menge Beispiele mit RabbitMQ-Bibliotheken. – Travis

5

Wir verwenden RABBITMQ, um alle unsere Anwendungen zu einem vollständigen Satz von Dingen zu verbinden. Innerhalb des gesamten Setups befindet sich ein zentraler RABBITMQ-Server, zu dem Systeme Warteschlangen erstellen, unabhängig davon, ob sie persistent oder temporär sind. Aufgrund der Verfügbarkeit von RABBITMQ läuft unser gesamtes Vertriebssystem darüber hinaus. Systeme, die mit unterschiedlichen Technologien erstellt wurden, senden und empfangen Aufgaben von anderen Systemen über RABBITMQ.

Wir haben ein Nachrichtenformat entwickelt, das in JSON oder XML sein kann, in dem Systeme miteinander kommunizieren. Es ist so schnell.Es gibt jedoch so viele Details, dass ich hier nicht näher eingehen werde, aber ich musste eine OTP-Anwendung auf dem obersten RABBITMQ-Client schreiben, um alle AMQP-Sachen von Erlang-Programmierern zu abstrahieren. Alles, was ein Programmierer weiß, ist ein APi, sagen wir, ich sende eine Anfrage an System A, bereiten Sie einfach das Nachrichtenformat M vor und rufen Sie die API: zeenode_amqp:req(SystemA,Message). Systeme können synchronous oder asynchronous Anfragen senden.

Was sollten Sie davon halten: RABBITMQ ist sehr gut für Warteschlangensysteme. Infact in unserem Setup, RABBITMQ pushes die Nachrichten direkt zu den Servern, sobald sie RABBITMQ von Clients treffen. Durch die Verwendung einer sorgfältig entworfenen Namenskonvention von Warteschlangen und Austausch und das sorgfältige Verstehen der verschiedenen AMQP-Anwendungsfallmodelle wird es perfekt zu Ihnen passen.

ich denke, es ist möglich, eigene zu rollen, mit Prozess-Wörterbücher wie Gproc in Verbindung mit Erlang Queue Module und Poolboy. Wie auch immer, ich würde RABBITMQ empfehlen. Lass mich wissen, ich könnte dir ein paar Bibliotheken schicken, also studierst du sie und siehst, ob sie für dich arbeiten. Sobald Sie ein gutes RABBITMQ-Setup haben, gut konfiguriert sind, folgen Sie den Docs auf ihrer Site, und dann haben Sie auch den Erlang amqp-Client installiert, dann ist es möglich, Warteschlangen und Austausch dynamisch zu erstellen (ob Sie persistent oder nicht wollen), hängt davon ab, was Sie tun). Sie können sogar RABBITMQ-Server clustern, sodass die Verfügbarkeit garantiert ist.

+1

Gut zu wissen RabbitMQ kann mit JSOn arbeiten und bestehen bleiben. Wenn Sie Vorschläge für RabbitMQ-Bibliotheken haben, schätze ich es. Ich kenne einen, der Hase und die anderen auf der RabbitMQ-Website genannt wird. Ein Teil meines Problems besteht darin, dass RabbitMQ so viele Optionen bietet - zum Beispiel drei verschiedene Clustering-Strategien und es ist schwer zu erkennen, was richtig ist. Ich denke, ich kann mehr Dokumente lesen. Freut mich zu hören, dass die Leute es für genau diese Art von Arbeit benutzen, das ist ein Teil von dem, was mich auch beschäftigt hat. – nirvana

Verwandte Themen