2017-08-03 46 views
0

怎麼辦時,我AKKA演員去世只是爲了在這裏討論

我想AKKA是偉大的編寫分佈式系統,但是但是如果你的主管和演員都在一臺機器分佈式系統將無法獲得高可用性。如果機器停機,整個分佈式系統就會停機。

那麼我怎麼樣把主管在一臺機器和所有的演員在不同的機器。所以如果一個演員去世,還有其他人來處理這個工作。如果我提出更換機器。主管怎麼知道這臺可以容納新演員的新機器?

最終,Supervisor樹會導致Root Supervisor。如果安裝Root Supervisor的機器死機怎麼辦?這是否使其成爲整個分佈式系統中最薄弱的環節?如何擁有一個可以故障轉移到的超級Root Supervisor節點?如果有幾個負載平衡器在所有的Root Supervisor之前分配負載,那麼如何?

回答

0

有些問題會再次出現,並由Akka中的各種羣集工具解決,這些工具都是基於核心羣集API構建的。

集羣單例允許您在整個集羣中擁有一個actor的單個實例,如果該節點被擊倒,單身主角將在新節點上啓動。在這裏看到的文檔:http://doc.akka.io/docs/akka/current/scala/cluster-singleton.html#cluster-singleton

分段,就像László提到的那樣,當你有大量的演員想要維護集羣中的一個時。 Docs here: http://doc.akka.io/docs/akka/current/scala/cluster-sharding.html

這兩者都很好地與Akka持久性配合在一起,以使演員到達與另一個節點上的先前演員實例相同的狀態。

如果你希望你的演員在任何時候都可用,你不可能在「只有一個」(本質上是一致性vs可用性問題)的同時實現這個目標,但你可以使用Akka分佈式數據來始終可用,但是最終一致的狀態。 http://doc.akka.io/docs/akka/current/scala/distributed-data.html

你當然也可以使用Actors和Cluster API構建自己的工具,如果沒有現有的適合你的用例(我不會說它是微不足道的);)。

0

首先,對分佈在多臺機器演員系統,通過網絡進行通信的一般話題頗有些文檔:

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

也就是說,雖然可以遠程監控的演員,你正確地猜測它不會產生更多的彈性。而是使用Cluster Sharding來確保多臺機器上存在worker的副本,並使用一個簡單的羣集感知ActorRef從另一臺機器向他們發送消息(沒有監督關係)。