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

标签 scala akka akka-cluster gossip

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

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

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

最佳答案

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

关于scala - 跨 Akka 集群同步数据的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37929266/

相关文章:

playframework - 集群中 Akka Actor 的发现

Scala:在一次操作中进行过滤和转换

scala - 为什么 Scala 中的模式匹配不适用于变量?

json - 在http4s上运行时使用Circe将递归数据结构编码为Json

scala - 如何使用reduce或fold来避免可变状态

playframework - 如何使用 Akka 2.3.x 运行 Play 2.2.x?

java - 在 Akka 中修改了 hello world - 为什么有这么多丢失的消息和死信?

Java Akka - 从父上下文向子 Actor 广播消息

akka-cluster - 使用akka cluster multi-jvm testkit模拟网络分区

java - 从外部调用 akka actor 非常慢