Java 如何";链接“;分布式Akka参与者系统?

Java 如何";链接“;分布式Akka参与者系统?,java,akka,actor,distributed-computing,apache-zookeeper,Java,Akka,Actor,Distributed Computing,Apache Zookeeper,我看到Akka Actor系统可以分布在多个JVM上,这些JVM甚至可能不在同一块硬件上运行。如果我理解正确,那么您可能会有一个分布式参与者系统,其中一组参与者在myapp01上,另一组参与者在myapp02上(例如,在本地数据中心上运行两个vSphere VM),还有第三组参与者在AWS上运行。因此,首先,如果我刚才所说的有任何不真实/不准确的地方,请先纠正我 如果到目前为止我所说的一切都或多或少是准确的,那么我想知道如何将所有这些分布式参与者“组”(不确定正确的术语是什么:JVM、参与者系统

我看到Akka Actor系统可以分布在多个JVM上,这些JVM甚至可能不在同一块硬件上运行。如果我理解正确,那么您可能会有一个分布式参与者系统,其中一组参与者在
myapp01
上,另一组参与者在
myapp02
上(例如,在本地数据中心上运行两个vSphere VM),还有第三组参与者在AWS上运行。因此,首先,如果我刚才所说的有任何不真实/不准确的地方,请先纠正我

如果到目前为止我所说的一切都或多或少是准确的,那么我想知道如何将所有这些分布式参与者“组”(不确定正确的术语是什么:JVM、参与者系统、参与者池、参与者集群等)真正“粘合”在一起,以便将工作分配给其中任何一个参与者,然后,居住在AWS节点上的
FizzActor
可以向居住在
myapp02
上的
BuzzActor
发送消息,等等

例如,按照上面的示例(2个vSphere VM和一台AWS机器),我如何将参与者组/系统/池/集群部署到每个参与者组/系统/池/集群中,以便他们都相互了解并在他们之间分配工作

  • 我猜Akka允许您配置Actor系统中所有不同“节点”的主机/端口
  • 我的下一个猜测是,这种配置是有限的,因为每次添加/删除/修改集群中的另一个节点时,您都必须更新每个节点的配置(否则Akka节点怎么可能“知道”新节点,或者“知道”我们刚刚关闭了AWS机器?)
  • 我最后的猜测是,这种限制可以通过将ApacheZooKeeper之类的东西加入到混合中来避免,并以某种方式将分布式系统中的每个节点视为一个单独的对等节点,然后使用ZooKeeper在所有对等方/节点之间协调/连接/链接/负载平衡

我是走上正轨还是偏离了正轨?

您应该查看Akka(,)的集群文档。回答你的一个问题,集群可以增长和收缩,而不需要重新启动集群中的其他节点,因为集群使用gossip通知节点有关其他节点的信息。感谢@cmbaxter-你能想到任何可以使用ZooKeeper来增强分布式Akka集群的原因吗?我认为Akka集群技术的目的是自给自足;不需要任何其他技术来管理集群的拓扑。我不会说不能将ZooKeeper与Akka群集一起使用,但将它们一起使用并不是群集设计的目的。@cmbaxter我有点不同意。ZK是Akka集群初始服务发现的一个很好的解决方案,假设您没有静态网络位置。不知何故,您的节点必须发现您的种子节点,ZK(或其他服务发现解决方案)是必要的,因为您事先不知道种子位于何处。@Ryan,akka群集节点需要知道它从群集配置中获得的种子节点。您是否建议先查找此信息(在启动actor系统之前),然后在启动actor系统之前将其动态合并到配置中?