演员模型中演员的粒度

时间:2016-06-09 14:48:23

标签: akka akka.net actor-model

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

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

将演员用于此任务和其他小任务是否是一个好主意?

1 个答案:

答案 0 :(得分:2)

是的,最好将通常容易失败的任务委派给处理该特定任务的子actor。这种模式在Petabridge博客上被称为Character Actor pattern,但如果链接在将来中断,则会在下面重申。

当应用程序执行某些有风险但关键的操作时,会使用Character Actor Pattern,但需要保护其他actor中包含的关键状态,并确保没有负面的副作用。

将这些有风险的操作简单地委托给一个专门建造但非常简单的一次性演员通常会更便宜,更快速,更可靠,他们的唯一工作就是成功地完成操作或者尝试死亡。

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

角色扮演者可以是临时或长期演员,但通常他们只能执行一种特定类型的冒险操作。通常,角色扮演者可以在整个应用程序中重复使用,属于许多不同类型的父母。例如,您可能有一个实用程序角色actor来处理外部网络请求,然后由整个应用程序中的父级角色用于他们自己的目的。

使用案例

角色扮演者模式广泛适用。每当您需要做一些有风险的事情时使用它,例如网络调用,文件I / O,解析格式错误的内容等等。任何这些操作都是角色扮演者的理想选择。

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

<强>优势

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

  • 将有状态和关键行为者与失败和冒险行动隔离开来;
  • 可以轻松地干净地引入特定于每种风险操作的重试/退避/撤消语义:因为您有一个特定于每个风险任务的角色扮演者,所以您有一个明确定义的位置来进行重试处理和相关操作。这些特定于创建角色扮演者的任务,不需要与其他演员共享,这意味着模式......
  • 通过让SupervisionStrategy和actor生命周期完成大部分工作来减少代码,您不需要在父actor中使用各种异常处理代码。让它崩溃,宝贝。