跨 Akka 集群同步数据的简单方法?

Simple approach to synchronizing data across an Akka cluster?

我有一些 运行 时间的数据,我想将其存在于我的 Akka 集群中每个节点上的指定参与者上,这些数据可以通过内部事件或 API 调用进行更新到单个节点。我可以将此数据存储在共享数据库中以使其永久化,但我宁愿将其存储在内存中以提高速度,因为它不需要持久保存。 Akka Cluster Singleton、Distributed Pub Sub 和可能的其他内置模块使用八卦协议来保持分布式状态同步。

是否有现成的方法来在我的集群中采用我自己的参与者的数据同步?

我考虑过只将更改发布到分布式 Pub Sub,但似乎这对丢失的消息没有弹性。如果我将它存储在集群单例中,那么如果该节点出现故障,它就无法存活。如果整个集群出现故障,我不需要持久性,但如果单个节点出现故障,我确实需要弹性。

您应该看看 Akka Distributed Data,它实际上应该称为 "Akka Replicated Data",因为它将在所有节点之间复制数据。 它提供了一个简单的键值存储,并且在一个节点上所做的任何更改都将复制到所有其他节点。由于 all 数据保存在 all 节点上,因此最适合用于小型数据集。此外,键值对中的值需要是 CRDT(无冲突复制数据类型)。该模块附带一些预定义的 CRDT,涵盖了很多用例。