2017-08-31 188 views
1

我正在評估Akka的項目,並試圖通過將演員狀態保存在高可用數據中來確定是否可以通過Akka-Persistence實現服務的高可用性商店。 (我不是indending使用Akka集羣)如何在崩潰後重新創建動態創建的持久性AKKA演員

我理解保存演員國家的概念,但我很努力找到一種方法來重新創建演員(不是演員國家)恢復我的失敗(墜毀)服務在備份主機上。

在我的設計中,有很多動態創建的角色,只有少數是在服務啓動時創建的。

如何找出在恢復時需要創建的演員?或者我想做一些根本性錯誤?

+0

偉大的問題 - 我認爲akka文檔缺少關於如何處理容錯的巨大部分(akka文檔中的容錯僅僅意味着演員拋出異常)。 – tonicsoft

回答

1

我認爲你的問題並不精確。例如,你問How can I find out what actors I have to create upon recovery? ......我們怎麼知道?只有你知道你的系統中存在哪些角色。爲什麼不重新啓動它們?只有你似乎知道爲什麼它不合適,但你沒有告訴我們爲什麼,所以我們不能幫助很多。

這就是說,我會嘗試做一些猜測並提出一種前進的方法。

,我要做的第一猜測是:

  • 上動態創建者的頂部,您還可以動態地終止它們。
  • 您要重新啓動所有動態創建的動作者,這些動作者在發生崩潰時仍在運行,但不是那些已經終止的動作者。

如果這是正確的,請繼續閱讀...否則請檢查您的問題。

請考慮which actors are running now是您系統狀態的一部分。用下面的事件狀態變化:

  • 演員是動態
  • 開始一個演員被終止

你可以有一個持續的演員管理該狀態,更新它,當上述事件發出。

您應該將該actor添加到始終在服務啓動時啓動的那些列表。

當該演員的重放完成(它將接收RecoveryCompleted消息:http://doc.akka.io/docs/akka/current/scala/persistence.html#recovery-status),你會重建which actors are running now狀態。然後,您必須根據狀態動態重新創建所有這些角色。