我想在集群上部署一个用akka制作的远程演员软件。该系统由多个工作节点和一个主节点组成。问题是我不能预先知道集群节点的IP地址(但我知道它们都是同一子网的一部分)。因此,我需要一个很好的方法来发现每个人的IP地址在启动后,以创建每个节点上正确的演员引用。
我正在寻找一个轻量级的解决方案(我只需要它的初始设置)分发在任何自由软件许可证。
发布于 2011-06-10 22:42:25
不久前,我创建了一个旨在解决您的问题的 (请随意重用代码和/或贡献代码)。
关于它是如何工作的几句话。它为每个参与者注册表(=node)启动一个远程参与者。RegistryActor保存到分布式设置中运行的所有其他注册表的链接。当一个新节点被添加到系统中时,它需要知道至少一个其他节点(ActorRegistry)并通知它。然后,ActorRegistry让所有其他节点知道新的一个(因此,任何RegistryActor都有到所有其他RegistryActor的链接),并启动一个交换到actor的链接的过程-在它结束时,所有actor注册表都有到系统中运行的所有actor(无论是本地的还是远程的)的链接。
有关详细信息,请参阅此。
发布于 2011-06-12 05:25:47
看看jgroups吧。
http://jgroups.org/
它符合你所有的标准--它是轻量级的、开源的、非常成熟、稳定的产品。
您可以根据自己的要求轻松地将其配置为自动组管理和发现-它支持几乎任何网络配置-您可以使用组播、共享文件或单播来发现组成员。
发布于 2011-06-10 20:53:44
除非所有节点都共享一些常识,否则我认为您的解决方案将不得不依赖IP广播。广播被定义为向子网上的所有网络节点发送数据包,因此,如果您的主节点在所有工作节点都在侦听它时这样做,那么您应该能够在事先不知道IP地址的情况下连接所有这些节点。
我还没有用Scala对此进行编码,但这里有一个用java广播消息的相当易读的示例:http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html。使用相同的类将其改编为Scala应该很简单。
https://stackoverflow.com/questions/6305900
复制相似问题