【发布时间】:2019-09-29 19:04:08
【问题描述】:
我正在将一个 java 应用程序转换为 Akka,以了解 Actor 模式。
假设我有三个常用层(应用程序、域、基础架构)。我的领域层有一些聚合,比如用户、汽车、...
问题: 因为这些聚合具有可变状态,我应该将这些聚合转换为演员吗?它们具有可变状态,并且似乎演员是适合此的解决方案。
【问题讨论】:
我正在将一个 java 应用程序转换为 Akka,以了解 Actor 模式。
假设我有三个常用层(应用程序、域、基础架构)。我的领域层有一些聚合,比如用户、汽车、...
问题: 因为这些聚合具有可变状态,我应该将这些聚合转换为演员吗?它们具有可变状态,并且似乎演员是适合此的解决方案。
【问题讨论】:
可变状态不是您应该使用 Actors 的原因。特别是如果您想将这种可变状态暴露给外部世界。使用 Akka 和 Actors 的主要论据是可扩展性和并发性。在其他情况下,它只会增加不必要的复杂性。
此外,actor 遵循 Erlang 的“让它崩溃”的容错模型。这意味着您的演员总是有可能会中断并且您会失去状态。通常情况下,具有重要状态的参与者被移动到参与者层次结构的顶部(想法是最好将所有有风险的操作传播给您的子参与者,因此在失败的情况下它们会崩溃并重新启动它们,保留所有重要数据到位)。
关于可变演员状态,我建议您阅读that 文章和these 最佳状态处理实践。
更新:这取决于聚合的工作方式。如果它很便宜,并且您可以忍受丢失数据(因为您可以在 actor 重新启动时轻松地重建它),那么就去做吧。
【讨论】: