【问题标题】:Akka clustering conflictsAkka 聚类冲突
【发布时间】:2023-03-16 10:25:01
【问题描述】:

Akka 文档谈到了各种看似相互关联的 Akka 技术,但并未对它们进行太多区分:

  • Akka 网络
  • Akka 远程处理
  • Akka 聚类
  • Akka ZeroMQ 模块

我的理解是“Akka Networking”只是一个模块/库,它使 Akka 能够通过 TCP 与远程参与者系统对话。 Akka Remoting 是另一个模块/lib(不包含在核心 Akka JAR 中),它使 Akka 可以使用 Gossip 协议。 Akka Clustering 是另一个模块/lib,它使用这些 Gossip 协议允许远程参与者系统聚集在一起,并以病毒/“服务发现”式的方式共享状态变化。我对 Akka ZeroMQ 的理解是它完成了与 Akka Clustering 相同的事情,除了使用 ZeroMQ 作为网络连接和协议的基础(而不是 Gossip)。

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

假设我在这里或多或少地达到目标,那么我主要担心的是我可能有远程 Actor System 1 (RAS1) 使用 Akka Clustering(以及因此 Gossip)尝试与 Remote Actor System 2 (RAS2) 通信使用 Akka ZeroMQ。在这种情况下,我们使用了两种完全不同的集群技术和协议,这是否意味着这两个远程系统无法相互通信,或者是否需要特别小心,以便它们互相兼容吗?

【问题讨论】:

    标签: akka zeromq distributed-computing


    【解决方案1】:

    Akka Remoting 允许一个演员与另一台机器上的另一个演员交谈。要使 Akka Remoting 正常工作,您需要知道要与之交谈的 Actor 的特定 IP 地址(或主机名)、ActorSystem 名称和 Actor 路径。两台机器的 ActorSystem 名称可以不同。

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 2017-06-09
      • 2018-02-05
      相关资源
      最近更新 更多