AKKA.NET 日志和快照存储
AKKA.NET Journals and Snapshot Store
由于我没有看到任何使用 AKKA.NET Journals and Snapshot store 的示例,我假设我必须使用这两种类型的参与者来实现事件存储和 CQRS。
Snapshot store 是希望在每次 actor 状态改变时更新,还是应该设置为像每 10 秒这样的计划更新?
Snapshot store actors 是否应该只与 Journal actors 对话,所以拥有状态的 actors 不应同时与 Journals 和 Snapshot 对话?我在想SOC这一行。
假设我必须关闭服务器并进行备份。用户试图通过 Web UI 访问产品(如计算机)。那个时候,产品演员在演员系统中是不存在的。要检索产品的状态,我不应该去快照存储而不是 运行 所有的日志来重新创建状态吗?
在 Akka.Persistence 中,Journal 和 SnapshotStore 实际上都是 actor,用于从特定持久性提供者中抽象出您的 actor。您几乎永远不必直接使用它们 - PersistentView
和 PersistentActor
在后台自动使用它们。
快照存储是优化 actor 恢复速度的唯一方法,以防持久性 actor 有大量事件需要恢复。 在分布式环境中,没有事件源的快照不是实现持久化的手段。好主意是让计数器在持久性参与者处理 X 事件后生成快照。基于时间的更新没有意义——在许多情况下,actor 可能没有在指定时间内更改。性能也很差(很多不必要的循环)。
SnapshotStores 和 Journals 互不相识。 Akka.Persistence 持久性 actor 具有内置的恢复机制,可处理 actor 从 SnapshtoStores 和 Journals 恢复状态并公开与它们通信的方法。
正如我所说,您可能不想直接与快照存储和日志通信。这就是持久性 actors/persistent 视图的用途。 Ofc 你可能直接从后端存储读取 actor 状态,但是你应该比较在最新保存的快照之后是否没有其他事件等。在不同的工作节点上重新创建持久性 actor/view 是 IMO 一个更好的解决方案。
由于我没有看到任何使用 AKKA.NET Journals and Snapshot store 的示例,我假设我必须使用这两种类型的参与者来实现事件存储和 CQRS。
Snapshot store 是希望在每次 actor 状态改变时更新,还是应该设置为像每 10 秒这样的计划更新?
Snapshot store actors 是否应该只与 Journal actors 对话,所以拥有状态的 actors 不应同时与 Journals 和 Snapshot 对话?我在想SOC这一行。
假设我必须关闭服务器并进行备份。用户试图通过 Web UI 访问产品(如计算机)。那个时候,产品演员在演员系统中是不存在的。要检索产品的状态,我不应该去快照存储而不是 运行 所有的日志来重新创建状态吗?
在 Akka.Persistence 中,Journal 和 SnapshotStore 实际上都是 actor,用于从特定持久性提供者中抽象出您的 actor。您几乎永远不必直接使用它们 - PersistentView
和 PersistentActor
在后台自动使用它们。
快照存储是优化 actor 恢复速度的唯一方法,以防持久性 actor 有大量事件需要恢复。 在分布式环境中,没有事件源的快照不是实现持久化的手段。好主意是让计数器在持久性参与者处理 X 事件后生成快照。基于时间的更新没有意义——在许多情况下,actor 可能没有在指定时间内更改。性能也很差(很多不必要的循环)。
SnapshotStores 和 Journals 互不相识。 Akka.Persistence 持久性 actor 具有内置的恢复机制,可处理 actor 从 SnapshtoStores 和 Journals 恢复状态并公开与它们通信的方法。
正如我所说,您可能不想直接与快照存储和日志通信。这就是持久性 actors/persistent 视图的用途。 Ofc 你可能直接从后端存储读取 actor 状态,但是你应该比较在最新保存的快照之后是否没有其他事件等。在不同的工作节点上重新创建持久性 actor/view 是 IMO 一个更好的解决方案。