Akka执着演员的用例是什么?

Ali*_*ira 5 event-driven cqrs akka event-sourcing akka-persistence

当我应该使用持久的Actor时,我对Akka Persistence和持久性actor的适用性感到困惑?

例如,从给定购物应用程序的Cart模块中,每个用户的Cart Session将是一个具有各自唯一persistenceId的持久actor吗?

实际应用程序的可用性是什么?查询端如何处理持久化actor的状态?当持久化actor在实际应用程序中没用时?

存储状态或存储消息是一回事吗?是不是?当我应该使用每一个时,有什么区别?

有人可以给我一些例子吗?

aba*_*yuk 7

这将是一个高度自以为是的问题,也是高度自以为是的答案。

假设您有一个任务管理系统,例如 Jira 或类似系统。假设您有以下演员布局:

  • 项目一
    • 票 1
    • 门票2
  • 项目3
    • 票 3

如果项目和票证实际上是持久参与者,那么与标准方法(查询等)相比,您有以下好处:

  • 将actor 上下放置会恢复其状态——因此不再需要复杂的查询和映射到actor 代码。此外,如果您的应用程序关闭,重新启动它实际上会加载所有历史数据(如下)
  • Actor 模型/Akka 监督为您提供了额外的奖励 - 如果您的 Actor 已经死亡(即任务在尝试从外部集成获取数据时死亡),重新启动它将带回所有历史记录。
  • 跟踪历史已经在那里(您可以对数据进行建模,以便事件日志实际上包括所有更改数据,例如用户和时间戳,以及旧值/新值)。这实际上适用于无数的业务领域——例如,贸易处理,其中每笔交易都必须存储自己的历史。
  • 另一部分是查询 - 如果您的系统允许最终一致的设计,您可以将数据分散到项目中的所有工单,并使用您想要的复杂查询并等待响应。

有用性来自应用程序的设计 - 有些非常适合(即多个独立或松散耦合的实体),有些不太适合(即您只想存储最后一组数据并生成它的预定义报告)