在阿卡停止演员的目的是什么?

时间:2016-01-13 15:51:04

标签: akka fault-tolerance

我已经阅读了Akka docs on fault tolerance & supervision,我认为我完全得到它们,但有一个很大的例外(没有双关语)。

为什么你想要/需要停止一个儿童演员???

文档中唯一的线索是:

  

更接近Erlang方式是在孩子失败时阻止孩子然后在主管中采取纠正措施的策略......

但是对我来说,停止一个孩子就像说“不再执行此代码”一样,对我而言,实际上与部署相同代码的新变化,该演员完全删除了该演员:

  • 每位演员在演员系统中扮演一些关键角色
  • 简单地停止演员意味着演员当前不再拥有角色,并假设系统现在可以某种方式(神奇地)在没有角色的情况下工作
  • 再次,对我而言,这与重构代码甚至不再拥有演员,然后部署这些更改没有什么不同

我确信我只是没有看到森林穿过树林,但我只是没有看到任何用例,我有这个庞大的复杂演员系统,每个演员都做重要的工作和然后把它交给下一个关键演员,但后来我停止了一个演员,神奇地整个系统继续完美地工作。

简而言之:阻止一个演员(对我而言)就像是从一辆移动的车辆中扯下变速器。这怎么可能是一个好/可取的东西?!

3 个答案:

答案 0 :(得分:2)

“错误内核”模式的本质是委托冒险操作并保护基本状态,通常会为一次性操作生成子操作符,并且当该操作完成并且其结果在其他地方发送时,儿童演员或父演员需要阻止它。 (否则,儿童演员将保持活跃/泄密)

答案 1 :(得分:1)

如果子actor正在执行可以安全终止的更长的进程,例如视频编码或某种文件转换,并且您必须部署新的构建,那么终止符号对于停止运行将非常有用优雅地处理。

答案 2 :(得分:0)

  

每位演员在演员系统中扮演一些关键角色

这是你遇到麻烦的地方,我可以创建一个子actor来完成一项工作,例如对数据库执行查询或维护连接用户的状态,这是它唯一的目的。

一旦数据库查询完成或用户已正常断开连接,子actor就不再有任何角色可以播放,应该停止,以便它释放它所拥有的任何资源。

  

简单地停止演员意味着演员当前没有任何>更长的角色,并假设系统现在可以某种方式(神奇地)在没有它的情况下工作

系统能够继续,因为我可以在需要时创建新的子actor。