2011-06-10 110 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