【问题标题】:Akka Cluster Scheduler - what happens when a node goes downAkka Cluster Scheduler - 当节点宕机时会发生什么
【发布时间】:2021-01-31 20:33:28
【问题描述】:

我想在我的集群中有一个调度程序,它会在一段时间后发送一些消息。从我看到的调度程序是每个actorsystem,从我的测试来看,只针对本地actor系统。不是集群一。所以如果在一个节点上安排一些事情,如果它宕机了,那么所有安排的任务都会被丢弃。

如果我创建一个负责调度的 Cluster Singleton,那么已经制定的调度能否在其他节点上重新创建?还是应该将其保留为具有已创建计划元数据结构的持久性参与者,并在 preStart 阶段重新安排所有已持久化的内容?

【问题讨论】:

    标签: akka akka-cluster akka-persistence


    【解决方案1】:

    如果之前所在的节点关闭或离开集群,则集群单例将在另一个节点上重生。

    转世将从白纸黑字开始:它不会记得自己的“前世”。

    然而,如果它是一个持久的actor(或者,等效地,它的行为是 Akka Typed 中的 EventSourcedBehavior),它会在启动时从事件流(和/或快照)中恢复它的状态。对于持久性参与者,这通常不需要做任何事情preStart:持久性实现将负责重播事件。

    根据计划的任务数量以及如果您希望在整个集群重新启动时放弃计划,可以使用 Akka Distributed Data 将计划元数据分布在集群周围(具有可调整的一致性),然后让集群单例调度参与者读取该元数据。

    【讨论】:

    • 嘿,谢谢你的回答。所以看起来我对这个坚持不懈的单身演员有个好主意。可惜集群调度器没有开箱即用的解决方案。
    • 嘿,还有一个问题。当然,使用 Cluster Singleton,我总是只有一个工作演员。因此,如果我使用 DD 中的这个复制器,其他节点上的起始单例参与者会收到复制器获得的所有历史事件吗?还是只是从订阅开始?
    • 使用 ddata,单例最终可以接收到所有更新,包括以前的更新(假设更新的法定人数与集群成员更改的预期速率和大小相适应)。
    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2020-07-10
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多