JVM崩溃后谁负责重新创建持久化的actor实例?

时间:2017-01-07 15:25:06

标签: akka akka-persistence

我正在评估是否使用Akka和akka persistent作为某个项目的关键工具包,其中有一个复杂的后台运行过程(可能由Quartz在每天的固定时间触发)。

后台运行过程将通过HTTP通信与许多不同的外部服务进行通信,将在本地生成许多加密文件,并通过SFTP传输。

从业务角度来看:

  • 这项服务是关键任务,大概会收取数百万用户的费用。他们自动从银行卡中取钱,帮助他们购买一些基金产品。

从技术角度来看:

  • 每个外部服务可能因任何原因而无法使用,例如网络问题,外部服务可能耗尽其资源(即jdbc连接)。
  • 我们的服务可能因紧急原因而被杀死,重新启动,重新部署或因某些意外错误而崩溃。
  • 使用不完整的作业重新启动进程后,需要使用不同的策略优雅地完成它们,例如重做,确认外部系统业务状态,以及从某个检查点恢复。

我正在阅读官方AkkaScala.PDF和一些YouTube视频会议视频,所有人都提到,演员的状态可以通过在JVM崩溃后重播日志中的事件来恢复。

但这一定是个愚蠢的问题,因为我没有发现它正在讨论中:

想象一下,服务中有1000个持久的演员,服务的JVM崩溃并重新启动,谁应该负责触发在新创建的演员系统中重新创建1000个持久演员。单进程模式和集群模式?如何?或者我应该先阅读哪些文章?

1 个答案:

答案 0 :(得分:1)

您应该阅读Akka PersistenceAkka Persistence Query的基础知识。但可能,首先我想到的是使用Akka Persistence Query AllPersistenceIdsQuery or CurrentPersistenceIdsQuery。它将为您提供所有持久性ID,您可以使用它来重新点燃持久性演员。特定persistent id的持久性演员将重播事件商店日记中的所有事件。您可以snapshots加快恢复速度。您的事件存储可能是某种数据库(例如Cassandra)。考虑到你的持久化actor具有特定的可变状态,它将在恢复后恢复到其最后状态。恢复可能需要一些时间。