当我真的不需要持久性时如何设置 Akka.NET 集群?

How to setup a Akka.NET cluster when I do not really need persistence?

我有一个相当简单的 Akka.NET 系统,它跟踪内存中的状态,但只包含派生数据。因此,任何参与者都可以在启动时从后端数据库加载其最新状态,然后开始接收消息并从那里保存它们的状态。所以我可以让演员失败并在我想要的时候重新开始这个过程。它会重建自己。 但是...我想 运行 跨多个节点(主要是为了内存要求)并且我想 increase/decrease 根据需求的节点数量。也用于在不停机的情况下发布新版本。 什么是最轻量级的(就持久性而言)集群设置来实现这一目标?你能 运行 没有持久性的集群吗?

这不是一个问题,让我一一回答:

  1. 所以我可以让 actor 失败并在我想要的时候重新启动流程 - 是的,但请记住,流程的硬重置比正常重置要昂贵得多关掉。在分布式系统中,如果您的节点出现故障,最好先将其传达给其余节点,而不是要求它们检测死节点 - 这是节点故障检测的一部分,可能需要一些时间(甚至子分钟)。
  2. 我想increase/decrease节点数量根据需求——这是集群的标准行为。在 Akka.NET 的情况下,根据您要使用的功能集,您有时可能需要指定集群大小的上限。
  3. 也用于在不停机的情况下发布新版本。 - 大多数集群功能都可以使用所谓的角色限定到一组特定节点。每个节点都可以拥有它的一组角色,可以使用它提供的服务并检测其他节点是否具有所需的功能。出于这个原因,您可以使用角色来进行版本控制。
  4. 你能运行没有持久性的集群吗? - 是的,这是默认配置(在 Akka 中,集群节点不需要使用任何形式的持久后端工作)。