在节点故障期间恢复akka实体执行元

9rnv2umw  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(107)

Akka-Cluster模块用于在应用程序中进行群集。
如果我们有一个设置,其中运行在节点上的实体参与者(我们可能有分布在节点上的数百个参与者)被调度为每1分钟接收一次消息(使用定时器/调度器),当托管参与者的节点正常和不正常关闭时会发生什么
我们如何确保在另一个节点上自动创建实体执行元?是仅在接收到第一条消息时创建实体执行元,还是在应用程序中没有任何逻辑的情况下自动创建执行元?此外,执行元的调度程序会发生什么情况。调度程序是否可以在执行元迁移到其他节点后自动运行..注意到目前为止,我还没有计划使用持久性?但它是否有助于为自动实体创建和消息调度提供持久性

k10s72fa

k10s72fa1#

如果实体参与者是使用集群分片来管理的,你可以使用记住实体来自动保持实体的活动状态,直到实体钝化自己。在kubernetes或类似的环境中,没有可靠的持久性存储连接到示例,这需要Akka Persistence的支持。
如果不使用集群分片,那么您可能必须使用持久性来实现类似的功能。
请注意,在重新平衡之后,实体参与者的状态不会恢复,除非实体参与者以某种方式是持久的(例如,通过使用Akka Persistence将其自身作为事件源)。该状态将包括计时器状态。实体参与者将被重新创建(最常见的是使用Behaviors.setup(我忘记Java API是否使用该名称)),因此这取决于参与者在响应该消息时应该做什么:

  • 如果“每分钟”意味着“每分钟不多于一次”,则实体演员应该仅仅开始每分钟的日程安排作为其设置的一部分;如果在最后调度的消息之后59秒发生崩溃/重新平衡,则将存在间隙,但是如果该消息导致例如轮询某个外部资源,差距最终可能无关紧要。
  • 如果“每分钟”意味着“至少每分钟一次”,那么实体参与者可以立即向其自身发送预定消息并设置计时器。然后,如果崩溃/重新平衡在最后一个预定消息之后立即发生,则预定消息的影响之间的时间段将比正常时间段短,但不会有多分钟的间隔。

相关问题