簡體   English   中英

Akka 遠程actor服務器發現

[英]Akka remote actor server discovery

我想在集群上部署一個用 akka 制作的遠程參與者軟件。 該系統由幾個工作節點和一個主節點組成。 問題是我無法提前知道集群節點的 IP 地址(但我知道它們都是同一個子網的一部分)。 因此,我需要一種在啟動后發現每個人的 IP 地址的好方法,以便在每個節點上創建正確的 actor refs。

我正在尋找在任何自由軟件許可下分發的輕量級解決方案(我只需要它進行初始設置)。

不久前,我創建了一個旨在解決您的問題的原型(請隨意重用代碼和/或貢獻)。

關於它是如何工作的幾句話。 它為每個參與者注冊表(=節點)啟動一個遠程參與者。 RegistryActor 保存指向在分布式設置中運行的所有其他注冊表的鏈接。 當一個新節點添加到系統中時,它需要知道至少一個其他節點(ActorRegistry)並通知它。 ActorRegistry 讓所有其他節點都知道新的節點(因此,任何 RegistryActor 都具有指向所有其他 RegistryActor 的鏈接),並開始交換與 Actor 的鏈接的過程 - 最后,所有 Actor 注冊表都具有指向所有 Actor 的鏈接(本地或遠程)在系統中運行。

有關更多詳細信息,請參閱此博文

看看jgroups。

http://jgroups.org/

它符合您的所有標准——它是輕量級、開源且非常成熟、穩定的產品。

您可以根據您的要求輕松配置它以進行自動組管理和發現 - 它幾乎支持任何網絡配置 - 您可以使用多播、共享文件或單播進行組成員發現。

除非所有節點都共享一些常識,否則我認為您的解決方案將不得不依賴 IP 廣播。 廣播被定義為向子網上的所有網絡節點發送一個數據包,所以如果你的主節點這樣做,而所有工作節點都在監聽它,你應該能夠在不知道 IP 地址的情況下將它們全部連接起來。

I haven't coded this in Scala, but here's a fairly readable example of how to broadcast messages in java: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html . 使用相同的類使其適應 Scala 應該很簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM