Akka.Net: 在两个或多个独立集群之间进行通信的最佳方法是什么?

Akka.Net: What is the best method for communicating between two or more independent clusters?

Akka.Net 集群需要单个 ActorSystem,但如果我有多个需要同步或异步协调的 ActorSystem(分布式应用程序)怎么办?

如何处理共享消息库?也许最好不要共享任何东西(通用消息库除外)并使用动态消息,例如:DynamicJsonMessageBase。

如何处理服务发现?

背景:我正在使用 Akka.Net 设计一个微服务架构,它可能会使用 Lighthouse 进行发现,REST HTTP API 用于后端 agents/portals,并为 sending/receiving 消息到非 Actor 服务。

通常您的集群由多个参与者系统组成。然而,在 Akka.NET 中,集群可以是异构的,这意味着节点(参与者系统)在执行的操作和加载的程序集方面可能彼此不同。为了在这方面区分它们,您可以为每个参与者系统配置不同的角色集。

集群角色也可用于在更新集群内的代码时限制节点之间的通信——这样具有旧代码的节点就不会尝试与更新的节点通信。这允许在不关闭集群的情况下执行集群的增量更新。

服务发现是使用第三方提供商实现的最佳方式,第三方提供商已经启用了此类功能,即 Consul、Azure Service Fabric、etcd 或 Zookeeper。