由于集群冲突
Akka clustering conflicts
Akka 文档讨论了各种看似相互关联的 Akka 技术,但并未对它们进行太多区分:
- Akka 网络
- Akka 远程处理
- Akka 集群
- Akka ZeroMQ 模块
我的 理解 是 "Akka Networking" 只是一个 module/lib,它使 Akka 能够通过 TCP 与远程参与者系统对话。 Akka Remoting 是另一个 module/lib(不包含在核心 Akka JAR 中),它让 Akka 使用 Gossip 协议。 Akka Clustering 是另一个 module/lib,然后使用这些 Gossip 协议允许远程参与者系统聚集在一起并以病毒式/"service discovery" 方式共享状态变化。我对 Akka ZeroMQ 的理解 是它完成与 Akka 集群相同的事情,除了使用 ZeroMQ 作为网络连接和协议的基础(而不是 Gossip)。
所以首先,如果我对这些不同modules/libs的理解不正确,请首先纠正我!
假设我在这里或多或少地达到了目标,那么我主要担心的是我可能使用 Akka 集群(以及 Gossip)尝试与远程参与者系统 2(RAS2)通信的远程参与者系统 1(RAS1) ) 使用 Akka ZeroMQ。在本例中,我们使用了两种完全不同的集群技术和协议,这是否意味着这两个远程系统不能相互通信,或者是否需要特别小心以便它们彼此兼容?
Akka Remoting 允许一个演员与另一台机器上的另一个演员对话。要使 Akka Remoting 工作,您需要知道特定的 IP 地址(或主机名)、ActorSystem 名称和您要与之交谈的 actor 的 Actor 路径。两台机器中的 ActorSystem 名称可以不同。
Akka Clustering 消除了必须知道您正在与之交谈的特定机器的问题(通过 Cluster-aware Routing 或通过侦听机器加入或离开集群的 Receptionist)。集群感知路由还允许在集群中的任何机器上拥有最少 X 个参与者实例 运行。 Akka Clustering 使用 Gossip 协议来维护集群成员列表。支持集群的应用程序必须知道至少一台主机的地址,该主机必须始终 运行 才能加入集群。可能有 2 个、3 个或更多,但想法是至少其中一个必须始终启动。 Akka Clustering 建立在 Akka Remoting 之上。
虽然我没有使用过 Akka ZeroMQ,但我认为它的工作方式与 Akka AMQP 类似。我更多地把它看作是 Remoting 的替代品,从某种意义上说,它使不同机器上的 actor 能够相互交谈,优点是 none actors 需要知道 actors 所在的任何其他机器的任何细节运行。但是,与 Remoting 一样,您需要手动创建接收消息的参与者,而 Clustering 则由集群来处理(只要您正确配置了路由器)。
关于你的最后一个问题。我能想到的让集群与 Akka ZeroMQ 对话的最简单方法是让集群中的一个(或几个?)actor 与 ZeroMQ actor 对话(即,您实际上可以混合和匹配)。在集群中有一个 actor 监听队列,另一个 actor 将消息发布到队列。有点像适配器模式。
Akka 文档讨论了各种看似相互关联的 Akka 技术,但并未对它们进行太多区分:
- Akka 网络
- Akka 远程处理
- Akka 集群
- Akka ZeroMQ 模块
我的 理解 是 "Akka Networking" 只是一个 module/lib,它使 Akka 能够通过 TCP 与远程参与者系统对话。 Akka Remoting 是另一个 module/lib(不包含在核心 Akka JAR 中),它让 Akka 使用 Gossip 协议。 Akka Clustering 是另一个 module/lib,然后使用这些 Gossip 协议允许远程参与者系统聚集在一起并以病毒式/"service discovery" 方式共享状态变化。我对 Akka ZeroMQ 的理解 是它完成与 Akka 集群相同的事情,除了使用 ZeroMQ 作为网络连接和协议的基础(而不是 Gossip)。
所以首先,如果我对这些不同modules/libs的理解不正确,请首先纠正我!
假设我在这里或多或少地达到了目标,那么我主要担心的是我可能使用 Akka 集群(以及 Gossip)尝试与远程参与者系统 2(RAS2)通信的远程参与者系统 1(RAS1) ) 使用 Akka ZeroMQ。在本例中,我们使用了两种完全不同的集群技术和协议,这是否意味着这两个远程系统不能相互通信,或者是否需要特别小心以便它们彼此兼容?
Akka Remoting 允许一个演员与另一台机器上的另一个演员对话。要使 Akka Remoting 工作,您需要知道特定的 IP 地址(或主机名)、ActorSystem 名称和您要与之交谈的 actor 的 Actor 路径。两台机器中的 ActorSystem 名称可以不同。
Akka Clustering 消除了必须知道您正在与之交谈的特定机器的问题(通过 Cluster-aware Routing 或通过侦听机器加入或离开集群的 Receptionist)。集群感知路由还允许在集群中的任何机器上拥有最少 X 个参与者实例 运行。 Akka Clustering 使用 Gossip 协议来维护集群成员列表。支持集群的应用程序必须知道至少一台主机的地址,该主机必须始终 运行 才能加入集群。可能有 2 个、3 个或更多,但想法是至少其中一个必须始终启动。 Akka Clustering 建立在 Akka Remoting 之上。
虽然我没有使用过 Akka ZeroMQ,但我认为它的工作方式与 Akka AMQP 类似。我更多地把它看作是 Remoting 的替代品,从某种意义上说,它使不同机器上的 actor 能够相互交谈,优点是 none actors 需要知道 actors 所在的任何其他机器的任何细节运行。但是,与 Remoting 一样,您需要手动创建接收消息的参与者,而 Clustering 则由集群来处理(只要您正确配置了路由器)。
关于你的最后一个问题。我能想到的让集群与 Akka ZeroMQ 对话的最简单方法是让集群中的一个(或几个?)actor 与 ZeroMQ actor 对话(即,您实际上可以混合和匹配)。在集群中有一个 actor 监听队列,另一个 actor 将消息发布到队列。有点像适配器模式。