Akka actor模型中的actor粒度

Akka actor模型中的actor粒度,akka,akka.net,actor-model,Akka,Akka.net,Actor Model,我的团队正在讨论我们的演员应该有多精细 例如,我们有一个参与者负责将json字符串反序列化为对象。支持将其变为参与者的理由是,反序列化可能导致错误,参与者及其监控模型可用于控制流 使用参与者执行此任务和其他小任务是否是一个好主意?是的,将通常容易失败的任务委托给处理特定任务的子参与者是一个好主意。这种模式在Petabridge博客上被称为,但在下文中重申,以防将来链接中断 当应用程序要执行一些危险但关键的操作,但需要保护其他参与者中包含的关键状态并确保没有负面副作用时,可以使用角色参与者模式 简

我的团队正在讨论我们的演员应该有多精细

例如,我们有一个参与者负责将json字符串反序列化为对象。支持将其变为参与者的理由是,反序列化可能导致错误,参与者及其监控模型可用于控制流


使用参与者执行此任务和其他小任务是否是一个好主意?

是的,将通常容易失败的任务委托给处理特定任务的子参与者是一个好主意。这种模式在Petabridge博客上被称为,但在下文中重申,以防将来链接中断

当应用程序要执行一些危险但关键的操作,但需要保护其他参与者中包含的关键状态并确保没有负面副作用时,可以使用角色参与者模式

简单地将这些高风险的操作委托给一个专门构建的、但微不足道的一次性参与者通常更便宜、更快、更可靠,而该参与者的唯一任务就是成功地执行操作,或者尝试死亡

这些勇敢的一次性演员都是角色演员

角色演员可以是临时演员或长期演员,但他们通常只执行一种特定类型的风险操作。通常情况下,角色角色角色可以在整个应用程序中重复使用,属于许多不同类型的父角色。例如,您可能有一个实用程序角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色角色

用例

角色-演员模式具有广泛的适用性。任何时候需要做一些有风险的事情,比如网络调用、文件I/O、解析格式错误的内容等等,都可以使用它。这些操作中的任何一个都是角色扮演者的好选择

角色角色在用于为其他重要角色提供保护和故障隔离时最为有效,通常是包含一些重要状态的角色

好处

使用角色-演员模式有三个关键好处:

  • 使有状态和关键的参与者免受失败和风险操作的影响
  • 很容易清晰地引入针对每种类型的风险操作的重试/退避/撤消语义:因为您有一个特定于每个风险任务的角色参与者,所以您有一个定义良好的位置来放置重试处理和相关操作。这些都是特定于角色演员的任务,不需要与其他演员共享,这意味着模式
  • 通过让SupervisionStrategy和actor生命周期完成大部分繁重的工作来减少代码,您不需要在父actor中使用各种异常处理代码。让它崩溃吧,宝贝

很高兴它起到了作用。这要归功于Petabridge的家伙们。尽管如此,该博客上有很多很棒的内容。一个相关的问题(对不起,我意识到我来晚了)是粒度是否需要统一。实际上,我认为大多数系统都以一系列“尺度”来表达参与者