【问题标题】:AKKA.NET Journals and Snapshot StoreAKKA.NET 期刊和快照存储
【发布时间】:2015-05-20 12:11:08
【问题描述】:

由于我没有看到任何使用 AKKA.NET Journals and Snapshot store 的示例,我假设我必须使用这两种类型的参与者来实现事件存储和 CQRS。

  1. Snapshot 存储是否应该在每次 Actor 状态更改时更新,还是应该设置为像每 10 秒这样的计划更新?

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

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

【问题讨论】:

    标签: persistence akka akka.net


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你说“在不同的工作节点上重新创建持久的actor/view”这也是内置的吗?
    • 是的,以Akka.Cluster.Sharding 插件的形式。
    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多