【问题标题】:Persisting Akka state in case of a crash在发生崩溃时保持 Akka 状态
【发布时间】:2012-10-05 15:05:43
【问题描述】:

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

Akka 的一个强大卖点是,当一个 Actor 崩溃时,Actor 系统会重新创建一个等效的 Actor 并插入旧的位置,从而保证强大的稳定性。

其他一些系统(我被告知 JMS 就是其中之一)更进一步,并持续保持参与者之间发送的消息。这样,如果机器在物理上崩溃了——比如因为硬件故障——仍然可以恢复到故障前的状态。

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

【问题讨论】:

    标签: scala persistence akka fault-tolerance


    【解决方案1】:

    是的,您所描述的可以通过使用durable mailboxes 来实现,它们可以根据每个参与者的需要进行配置。

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

    【讨论】:

      【解决方案2】:

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

      与演员范式完美结合的一种方法是事件溯源。在这个概念中,应用程序的状态存储为一系列事件,而不是状态本身。当系统或其一部分发生故障时,可以通过应用来自持久事件存储的所有事件来恢复状态。持久邮箱可以是指向此类事件存储的链接,也可以直接使用专用参与者。

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

      【讨论】:

        猜你喜欢
        • 2012-02-23
        • 1970-01-01
        • 2013-12-31
        • 2012-03-08
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        相关资源
        最近更新 更多