演员模型中演员的粒度

Granularity of actors in actor model

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

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

使用 actor 来完成这项任务和其他小任务是个好主意吗?

是的,将通常容易失败的任务委托给处理该特定任务的 child 参与者是个好主意。这种模式在 Petabridge 博客上称为 Character Actor pattern,但在下面重申以防 link 将来中断。

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

将这些有风险的操作简单地委托给 purpose-built 往往更便宜、更快、更可靠,但这些操作者的唯一工作就是成功执行操作或死于尝试。

这些勇敢的、一次性的演员是性格演员。

角色演员可以是临时演员或 long-running 演员,但通常他们被设计为仅执行一种特定类型的冒险操作。通常,整个应用程序中的角色演员可能 re-used,属于许多不同类型的 parent。例如,您可能有一个实用角色 actor 来处理发出外部网络请求,然后 parent 个 actor 在整个应用程序中出于他们自己的目的使用它。

用例

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

角色角色在用于为某些其他重要类型的角色(通​​常包含某些重要状态)提供保护和故障隔离时最有效。

好处

使用角色演员模式有三个主要好处:

  • 将有状态和关键的参与者与故障和风险操作隔离开来;
  • 可以很容易地干净地引入特定于每种类型的风险操作的重试/退避/撤消语义:因为你有一个特定于每个风险任务的角色演员,你有一个 well-defined 地方来放置重试处理及相关操作。这些特定于角色演员为其创建的任务,不需要与其他演员共享,这意味着模式......
  • 通过让 SupervisionStrategy 和 actor 生命周期完成大部分繁重的工作来减少代码,您不需要 parent actor 中的各种异常处理代码。让它崩溃吧,宝贝。