2017-08-03 4 views
0

Gerade für die Diskussion hier stirbt,Was tun, wenn mein AKKA Schauspieler

Ich dachte AKKA für das Schreiben von verteilten Systemen ist groß, aber jedoch, wenn Ihr Betreuer und Schauspieler sind alle verteilten System in einer Maschine nicht hoch verfügbar sein . Wenn die Maschine ausfällt, geht das gesamte verteilte System verloren.

Also, wie wäre es, wenn ich den Supervisor in eine Maschine und alle Actors in separate Maschinen setze. Wenn also ein Schauspieler stirbt, gibt es noch andere, die mit der Arbeit fertig werden. Wenn ich eine Ersatzmaschine bringe. Wie kann der Supervisor wissen, dass es diese neue Maschine gibt, die einen neuen Schauspieler aufnehmen kann?

Letztendlich führt der Supervisor-Tree zu einem Root Supervisor. Was passiert, wenn die Maschine, in der der Root Supervisor installiert ist, stirbt? Ist dies das schwächste Glied im gesamten verteilten System? Wie wäre es mit einem zusätzlichen Root-Supervisor-Knoten, auf den man scheitern kann? Wie wäre es mit mehreren und einem Load Balancer vor dem Root Supervisor, um die Last zu verteilen?

Antwort

0

Einige Probleme treten immer wieder auf und werden durch verschiedene Cluster-Tools in Akka gelöst, die alle auf den zentralen Cluster-APIs basieren.

Cluster Singleton ermöglicht es Ihnen, eine einzelne Instanz eines Actors in einem ganzen Cluster zu haben, wenn der Knoten abgestürzt ist, werden die Singleton Actors auf einem neuen Knoten gestartet. Siehe Dokumentation hier: http://doc.akka.io/docs/akka/current/scala/cluster-singleton.html#cluster-singleton

Sharding, wie von László erwähnt, ist, wenn Sie eine hohe Anzahl von Akteuren haben, die Sie im Cluster beibehalten möchten. Dokumente hier: http://doc.akka.io/docs/akka/current/scala/cluster-sharding.html

Diese beiden passt gut zusammen mit Akka Persistence, um einen Akteur im gleichen Zustand wie eine vorherige Akteurinstanz auf einem anderen Knoten ankommen zu lassen.

Wenn Sie möchten, dass Ihre Actors jederzeit verfügbar sind, können Sie dies nicht gleichzeitig mit "nur eins" erreichen (im Wesentlichen das Konsistenz- oder Verfügbarkeitsproblem), aber Sie können Akka Distributed Data für immer verfügbar aber verwenden schließlich konsistenter Zustand. http://doc.akka.io/docs/akka/current/scala/distributed-data.html

Sie können natürlich auch Ihre eigenen Tools mit Actors und den Cluster-APIs erstellen, wenn keines der vorhandenen zu Ihrem Anwendungsfall passt (ich würde nicht sagen, dass es trivial ist;)).

0

Zunächst einmal ist es eine ganz Dokumentation über das allgemeine Thema Actor Systeme über mehrere Maschinen zu verteilen, die Kommunikation über das Netzwerk:

http://doc.akka.io/docs/akka/snapshot/scala/index-network.html

das gesagt ist, während es möglich ist, aus der Ferne einen Schauspieler zu beaufsichtigen , Sie haben richtig vermutet, dass es nicht viel zusätzliche Elastizität ergibt. Verwenden Sie stattdessen Cluster Sharding, um sicherzustellen, dass Kopien von Arbeitern auf mehreren Computern vorhanden sind, und verwenden Sie ein einfaches clusterfähiges ActorRef, um eine Nachricht von einer anderen Maschine (ohne Überwachungsbeziehung) an sie zu senden.

Verwandte Themen