Akka集群冲突

sme*_*eeb 5 distributed-computing zeromq akka

Akka doc讨论了各种看似相互关联的Akka技术,但没有区分它们:

  • 阿卡网络
  • Akka Remoting
  • Akka聚类
  • Akka ZeroMQ模块

我的理解是"Akka Networking"只是一个模块/ lib,它使Akka能够通过TCP与远程actor系统通信.Akka Remoting是另一个模块/ lib(未包含在核心Akka JAR中),它为Akka提供了Gossip协议的使用.而Akka Clustering是另一个模块/ lib,然后使用这些Gossip协议允许远程actor系统聚集在一起,并以病毒式/"服务发现"的方式来改变变化.我 Akka ZeroMQ的理解是它完成了与Akka Clustering相同的功能,除了使用ZeroMQ作为网络连接和协议(而不是Gossip)的基础.

首先,如果我对这些不同模块/库的理解不正确,请首先纠正我!

假设我或多或少在这里目标,那么我主要担心的是我可能有远程演员系统1(RAS1)使用Akka Clustering(因此Gossip)试图与使用Akka ZeroMQ的远程演员系统2(RAS2)进行通信.在这种情况下,我们使用两种完全不同的群集技术和协议,这是否意味着这两个远程系统无法相互通信,或者是否需要特别注意使它们彼此兼容?

Mar*_*mou 1

Akka Remoting 允许一个 actor 与另一台机器上的另一个 actor 进行对话。为了使 Akka Remoting 工作,您需要知道您想要与之交谈的 Actor 的具体 IP 地址(或主机名)、ActorSystem 名称和 Actor 路径。两台计算机中的 ActorSystem 名称可能不同。

Akka 集群消除了必须知道正在与之通信的特定机器的问题(通过集群感知路由或通过侦听加入或离开集群的机器的接待员)。集群感知路由还允许在集群中的任何机器上运行至少 X 个参与者实例。Akka Clustering 使用 Gossip 协议来维护集群成员列表。支持集群的应用程序必须知道至少一台主机的地址,该主机必须始终运行才能加入集群。可能有 2 个、3 个或更多,但我们的想法是至少其中一个必须始终处于运行状态。Akka Clustering 构建在 Akka Remoting 之上。

虽然我没有使用过 Akka ZeroMQ,但我认为它的工作原理与 Akka AMQP 类似。我更多地将其视为远程处理的替代方案,因为它使不同机器上的参与者能够相互交谈,其优点是参与者不需要知道参与者正在运行的任何其他机器的任何细节。然而,与远程处理一样,您需要手动创建接收消息的参与者,而使用集群则集群会处理它(只要您正确配置了路由器)。

关于你的最后一个问题。我能想到的集群与 Akka ZeroMQ 对话的最简单方法是在集群中拥有一个(或多个?)参与者与 ZeroMQ 参与者对话(即,您实际上可以混合和匹配)。在集群内有一个参与者监听队列,并有另一个参与者将消息发布到队列。有点像适配器模式。