2011-06-10 155 views
10

我想在羣集上部署使用akka製作的遠程演員軟件。該系統由多個工作節點和一個主節點組成。問題是我無法預先知道集羣節點的IP地址(但我知道它們都是同一個子網的一部分)。因此,我需要一種很好的方式來在啓動後發現每個人的IP地址,以便在每個節點上創建正確的actor參考。Akka遠程演員服務器發現

我正在尋找一個ligtweight解決方案(我只需要它的初始設置)在任何免費軟件許可下分發。

回答

7

前一段時間,我創建了一個prototype,旨在解決您的問題(隨時重用代碼和/或貢獻)。

有關它如何工作的幾句話。它爲每個actor註冊表(=節點)啓動一個遠程actor。 RegistryActor持有指向分佈式設置中運行的所有其他註冊表的鏈接。當一個新節點被添加到系統中時,它需要知道至少一個其他節點(ActorRegistry)並通知它。 ActorRegistry比讓所有其他節點知道新的(因此,任何RegistryActor都鏈接到所有其他RegistryActor的鏈接),並啓動一個交換鏈接到角色的過程 - 最後,所有角色註冊表都鏈接到所有角色在本地或遠程)在系統中運行。

欲瞭解更多詳情,請參考此blogpost

1

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

我還沒有在Scala中編寫過這個代碼,但是這裏有一個相當易讀的例子:如何在java中傳播消息:http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html。使用相同的類適應Scala應該很簡單。

4

看看jgroups。

http://jgroups.org/

它滿足您的所有標準 - 它是輕量級,開源和非常成熟的,穩定的產品。

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

+0

太好了。我已經嘗試過jgroups,並且我已經滿意了。 – paradigmatic 2011-06-27 21:06:16