2017-08-31 33 views
1

我正在评估Akka的项目,并试图通过将演员状态保存在高可用数据中来确定是否可以通过Akka-Persistence实现服务的高可用性商店。 (我不是indending使用Akka集群)如何在崩溃后重新创建动态创建的持久性AKKA演员

我理解保存演员国家的概念,但我很努力找到一种方法来重新创建演员(不是演员国家)恢复我的失败(坠毁)服务在备份主机上。

在我的设计中,有很多动态创建的角色,只有少数是在服务启动时创建的。

如何找出在恢复时需要创建的演员?或者我想做一些根本性错误?

+0

伟大的问题 - 我认为akka文档缺少关于如何处理容错的巨大部分(akka文档中的容错仅仅意味着演员抛出异常)。 – tonicsoft

回答

1

我认为你的问题并不精确。例如,你问How can I find out what actors I have to create upon recovery? ......我们怎么知道?只有你知道你的系统中存在哪些角色。为什么不重新启动它们?只有你似乎知道为什么它不合适,但你没有告诉我们为什么,所以我们不能帮助很多。

这就是说,我会尝试做一些猜测并提出一种前进的方法。

,我要做的第一猜测是:

  • 上动态创建者的顶部,您还可以动态地终止它们。
  • 您要重新启动所有动态创建的动作者,这些动作者在发生崩溃时仍在运行,但不是那些已经终止的动作者。

如果这是正确的,请继续阅读...否则请检查您的问题。

请考虑which actors are running now是您系统状态的一部分。用下面的事件状态变化:

  • 演员是动态
  • 开始一个演员被终止

你可以有一个持续的演员管理该状态,更新它,当上述事件发出。

您应该将该actor添加到始终在服务启动时启动的那些列表。

当该演员的重放完成(它将接收RecoveryCompleted消息:http://doc.akka.io/docs/akka/current/scala/persistence.html#recovery-status),你会重建which actors are running now状态。然后,您必须根据状态动态重新创建所有这些角色。