1

由于我没有看到任何使用AKKA.NET Journals 和 Snapshot store的示例,我假设我必须使用这两种类型的 actor 来实现 Event Store 和 CQRS。

  1. 快照存储是否应该在每次参与者状态更改时更新,或者应该设置为每 10 秒的计划更新?

  2. Snapshot 存储 Actor 是否应该只与 Journal Actor 对话,所以拥有 state 的 Actor 不应该同时与 Journals 和 Snapshot 对话?我在考虑SOC。

  3. 假设我必须关闭服务器并备份。用户尝试通过 Web UI 访问产品(如计算机)。那个时候,产品actor在actor系统中是不存在的。要检索产品的状态,我不应该去快照存储而不是运行所有日志来重新创建状态吗?

4

1 回答 1

7

在 Akka.Persistence 中,Journal 和 SnapshotStore 实际上都是参与者,用于将您的参与者从特定的持久提供者中抽象出来。您几乎不必直接使用它们 -PersistentViewPersistentActor在引擎盖下自动使用它们。

  1. 快照存储是优化 Actor 恢复速度的唯一方法,以防您的持久 Actor 有大量事件需要恢复。在分布式环境中,没有事件源的快照并不是实现持久性的手段。好主意是有一个计数器,它在持久性参与者处理 X 事件后生成一个快照。基于时间的更新没有意义——在许多情况下,actor 可能在指定的时间内没有改变。性能也很差(很多不必要的循环)。

  2. SnapshotStores 和 Journals 彼此不知道。Akka.Persistence 持久性 Actor 具有内置的恢复机制,该机制处理 Actor 从 SnapshtoStores 和 Journals 的状态恢复,并公开与它们通信的方法。

  3. 正如我所说,您可能不想直接与快照存储和日志进行通信。这就是持久参与者/持久视图的用途。Ofc 您可能只是直接从后端存储读取演员状态,但是您应该比较在最新保存的快照等之后是否没有其他事件。在不同的工作节点上重新创建持久演员/视图是 IMO 更好的解决方案。

于 2015-05-22T06:12:39.517 回答