2015-06-05 13 views
5

Die Akka doc Gespräche über eine Vielzahl von scheinbar miteinander verbundenen Akka Technologien ohne viel zwischen ihnen zu unterscheiden:Akka Clustering Konflikte

  • Akka Networking
  • Akka Remoting
  • Akka Clustering
  • Die Akka ZeroMQ Modul

Mein Verständnis ist das "Akka Networking" ist einfach ein Modul/lib, das Akka die Möglichkeit gibt, über TCP mit Remote-Aktor-Systemen zu kommunizieren. Akka Remoting ist ein weiteres Modul/lib (nicht im Kern-Akka JAR enthalten), das Akka die Verwendung von Gossip-Protokollen gibt. Und Akka Clustering ist ein weiteres Modul/lib, das dann diese Gossip-Protokolle verwendet, um Remote-Aktor-Systemen zu ermöglichen, Cluster zu bilden und Veränderungen in einer viralen/"Service Discovery" -artigen Art und Weise zu beschleunigen. Und meine Verständnis von Akka ZeroMQ ist, dass es die gleiche Sache wie Akka Clustering, außer die Verwendung von ZeroMQ als Grundlage der Netzwerkverbindungen und Protokolle (anstelle von Gossip) erreicht.

Also zuerst, wenn mein Verständnis dieser verschiedenen Module/Bibliotheken falsch sind, bitte beginnen Sie, indem Sie mich korrigieren!

Angenommen, ich bin mehr oder weniger Ziel hier, dann ist mein Hauptanliegen, dass ich Remote Act System 1 (RAS1) mit Akka Clustering (und damit Gossip) versuchen kann, mit Remote Actor System 2 (RAS2) zu kommunizieren welche verwendet Akka ZeroMQ. In diesem Fall verwenden wir zwei völlig unterschiedliche Clustering-Technologien und -Protokolle, also bedeutet dies, dass diese beiden Remote-Systeme nicht miteinander kommunizieren können oder besondere Vorsicht geboten ist, damit sie miteinander kompatibel sind ?

Antwort

1

Akka Remoting ermöglicht es einem Akteur, mit einem anderen Akteur auf einer anderen Maschine zu sprechen. Damit Akka Remoting funktioniert, müssen Sie die spezifische IP-Adresse (oder den Hostnamen), den ActorSystem-Namen und den Actor-Pfad des Actors kennen, mit dem Sie sprechen möchten. Der ActorSystem-Name kann in den zwei Computern unterschiedlich sein.

Akka Clustering beseitigt das Problem, dass Sie die spezifische Maschine kennen müssen, mit der Sie sprechen (über clusterfähiges Routing oder über eine Empfangsdame, die Maschinen hört, die dem Cluster beitreten oder ihn verlassen). Cluster-fähiges Routing ermöglicht außerdem, dass mindestens ein X-Exemplar eines Actors auf einem beliebigen Computer im Cluster ausgeführt wird. Akka Clustering verwendet das Gossip-Protokoll, um die Liste der Cluster-Mitglieder zu verwalten. Eine clusterfähige Anwendung muss die Adresse mindestens eines Hosts kennen, der immer ausgeführt werden muss, um dem Cluster beitreten zu können. Es könnte 2, 3 oder mehr geben, aber die Idee ist, dass mindestens einer von ihnen immer auf sein muss. Akka Clustering baut auf Akka Remoting auf.

Obwohl ich nicht mit Akka ZeroMQ gearbeitet habe, nehme ich an, dass es ähnlich wie Akka AMQP funktioniert. Ich sehe es eher als eine Alternative zu Remoting, in dem Sinne, dass es Akteuren auf verschiedenen Maschinen ermöglicht, miteinander zu sprechen, mit dem Vorteil, dass keiner der Akteure irgendwelche Besonderheiten über irgendwelche anderen Maschinen, auf denen Schauspieler laufen, kennen muss. Wie beim Remoting müssen Sie jedoch die Akteure, die die Nachrichten empfangen, manuell erstellen, während beim Clustering der Cluster dafür sorgt (sofern Sie Ihre Router korrekt konfiguriert haben).

In Bezug auf Ihre letzte Frage. Der einfachste Weg, an den ich denken kann, wenn ein Cluster mit Akka ZeroMQ spricht, wäre, einen (oder mehrere?) Akteure im Cluster zu haben, die mit ZeroMQ-Akteuren sprechen (d. H., Sie können tatsächlich mischen und anpassen). Haben Sie einen Akteur im Cluster, der die Warteschlange überwacht, und haben Sie einen anderen, der die Nachricht in der Warteschlange veröffentlicht. Sortieren eines Adaptermusters.