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

时间:2016-03-15 16:17:34

标签: akka cqrs event-sourcing event-driven akka-persistence

当我应该使用持久的Actor时,我对于Akka Persistence和持久性actor的适用性一塌糊涂?

例如,从给定购物应用程序的购物车模块中,每个用户的购物车会话都是具有各自唯一持久性的持久性演员吗?

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

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

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

1 个答案:

答案 0 :(得分:4)

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

想象一下,你有一个任务管理系统,例如吉拉或类似的。假设您有以下演员布局:

  • 项目1
    • Ticket 1
    • Ticket 2
  • 项目3
    • Ticket 3

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

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

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