我正在将一个java应用程序转换为Akka,以便了解actor模式。假设我有三个通常的层(应用程序、域、基础结构),我的域层有一些聚合,如User、Car ...
**问题:**因为这些聚合具有可变状态,我是否应该将这些聚合转换为参与者?它们具有可变状态,似乎参与者是适合此情况的解决方案。
omhiaaxx1#
可变状态并不是使用Actor的原因。特别是当你想把可变状态暴露给外部世界时。使用Akka和Actor的主要理由是可伸缩性和并发性。在其他情况下,它只会增加不必要的复杂性。此外,执行元遵循Erlang的“让它崩溃”容错模型。这意味着始终存在执行元崩溃而丢失状态的可能性。通常,具有重要状态的执行元将被移到执行元层次结构的顶部(最好将所有危险的操作传播给子执行元,这样在发生故障时,它们会崩溃,您可以重新启动它们,将所有重要数据保持在适当位置)。关于可变参与者状态,我建议您阅读that文章和these最佳状态处理实践。更新:这取决于聚合的工作方式。如果它是便宜的东西,你可以忍受丢失的数据(因为你可以很容易地在演员重新启动时重建它),那么就去做吧。
1条答案
按热度按时间omhiaaxx1#
可变状态并不是使用Actor的原因。特别是当你想把可变状态暴露给外部世界时。使用Akka和Actor的主要理由是可伸缩性和并发性。在其他情况下,它只会增加不必要的复杂性。
此外,执行元遵循Erlang的“让它崩溃”容错模型。这意味着始终存在执行元崩溃而丢失状态的可能性。通常,具有重要状态的执行元将被移到执行元层次结构的顶部(最好将所有危险的操作传播给子执行元,这样在发生故障时,它们会崩溃,您可以重新启动它们,将所有重要数据保持在适当位置)。
关于可变参与者状态,我建议您阅读that文章和these最佳状态处理实践。
更新:这取决于聚合的工作方式。如果它是便宜的东西,你可以忍受丢失的数据(因为你可以很容易地在演员重新启动时重建它),那么就去做吧。