Akka远程Actor服务器发现

11

我希望在一个集群上部署使用akka框架开发的远程actors软件。系统由多个工作节点和一个主节点组成。问题在于我无法预先知道集群节点的IP地址(但我知道它们都是同一子网络的一部分)。因此,我需要一种好的方式来在启动后发现每个节点的IP地址,以在每个节点上创建正确的actor refs。

我正在寻找一个轻量级的解决方案(我只需要它用于初始设置),并且需要基于任何免费的软件许可证进行分发。

3个回答

7

不久前,我创建了一个原型,旨在解决你的问题(可以自由地重用代码和/或做出贡献)。

关于它如何工作,我有几句话要说。它为每个演员注册表(=节点)启动一个远程演员。RegistryActor持有所有运行在分布式设置中的其他注册表的链接。当将新节点添加到系统中时,它需要知道至少一个其他节点(ActorRegistry)并通知它。然后,ActorRegistry让所有其他节点都知道新节点(因此,任何RegistryActor都有链接到所有其他RegistryActor的链接),并开始交换演员链接的过程 - 在结束时,所有演员注册表都有链接到系统中运行的所有演员(本地或远程)的链接。

有关更多详细信息,请参阅此博客文章


4

看一下jgroups。

http://jgroups.org/

它符合您的所有标准- 它是轻量级的,开源的,并且非常成熟,稳定的产品。

您可以根据需求轻松配置自动组管理和发现 - 它支持几乎任何网络配置 - 您可以使用多播,共享文件或单播来进行组成员发现。


回答很好。我以前尝试过jgroups,感到很满意。 - paradigmatic

1

除非所有节点共享某些公共知识,否则我认为您的解决方案必须依赖于IP广播。广播被定义为将数据包发送到子网上的所有网络节点,因此如果您的主节点这样做,而所有工作节点都在监听它,那么您应该能够在不事先知道IP地址的情况下将它们全部连接起来。

我没有在Scala中编写过这个代码,但是这里有一个相当易读的Java广播消息示例:http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html。使用相同的类将其适应到Scala应该很简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接