在崩溃的情况下坚持Akka状态

时间:2012-10-05 15:05:43

标签: scala persistence akka fault-tolerance

我是Akka的初学者,我喜欢它为异步编程提供的许多功能,例如Actors,Agents或Futures。

Akka的一个强烈卖点是,当一个演员崩溃时,一个等同的演员由演员系统重新创建并插入旧演员系统,保证稳定性。

其他一些系统(我被告知JMS是其中一个)更进一步,持续不断地在演员之间发送消息。这样,如果机器在物理上崩溃 - 比如由于硬件故障 - 仍然可以恢复故障之前的状态。

这对我正在开发的应用程序非常有吸引力。 Akka是否提供任何此类机制?如果没有,是否有某种方法可以将其与外部系统集成,从而实现这一目标?

2 个答案:

答案 0 :(得分:10)

是的,您所描述的内容可以通过使用durable mailboxes来实现,可以根据需要在每个角色的基础上进行配置。

有不同的后端有几种实现,如果你没有为你喜欢的消息队列找到一个,那么实现你自己的适配器并不是很困难。我们将在Akka源代码树中维护的唯一实现是FileBasedMailbox,作为如何执行它的模板。 Akka 2.0.x发行版中的其他邮箱类型由各自的“所有者”维护为社区项目。

答案 1 :(得分:5)

持久邮箱是选择性保存邮件的好方法,因此Akka可以实现类似JMS的类似功能。除了技术之外,在架构级别考虑哪些消息与您的系统相关以及在系统发生故障后如何恢复状态非常重要。

与演员范式一起很好地发挥作用的一种方式是事件采购。在此概念中,应用程序的状态存储为一系列事件而不是状态本身。当系统或其中一部分失败时,可以通过应用来自持久性事件存储的所有事件来恢复状态。持久邮箱可以是指向此类事件存储的链接,也可以直接使用专用actor。

Martin Krasser在这个博客上有一个非常好的article,使用Akka来描述这种方法。他还是Akka事件采购扩展的作者,名称为eventsourced