繁体   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