2016-10-23 31 views
1

Akka.Net群集需要单个ActorSystem,但是如果我有几个需要同步或异步协调的ActorSystems(分布式应用程序)会怎样?Akka.Net:在两个或多个独立群集之间进行通信的最佳方法是什么?

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

如何处理服务发现?

背景:我正在设计一个使用Akka.Net的微服务架构,它可能会使用Lighthouse作为发现,REST HTTP API用于后端代理/门户,并且包含一个传输机制,用于向非Actor服务发送/接收消息。

回答

1

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

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

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

+0

我的理解是,只能在每个集群的ActorSystem上存在。 – alturium

+0

所有参与者系统必须在群集中共享相同的名称。但是集群本身应该能够跨越多台机器(否则它会是什么集群?)。在单个进程中只有一个“ActorSystem”是很难实现的。 – Horusiath

+0

问题是关于不在群集内的群集之间的通信或传输,这将遵循你的观点。但我认为你错过了这个问题的重点。 – alturium

相关问题