2012-10-05 51 views
4

我是Akka的初學者,我喜歡它爲異步編程提供的許多功能,例如Actor,Agents或Futures。在發生崩潰時堅持Akka狀態

阿卡的一個強大賣點是,當一個演員崩潰時,一個等同的演員被演員系統重新創建並替換舊演員,保證了強大的穩定性。

其他一些系統(我被告知JMS是其中一個系統)更進一步,持續不斷地發送演員之間發送的消息。這樣,如果機器在物理上崩潰(比如說硬件故障),仍然可以恢復故障發生前的狀態。

這對我現在正在開發的應用程序非常有吸引力。 Akka是否提供這樣的機制?如果沒有,有沒有辦法將它與外部系統整合成可以實現的方式?

回答

5

持久郵箱是有選擇地保存郵件的好方法,因此Akka可以實現類似JMS的功能。除了技術之外,在體系結構級別考慮哪些消息與系統相關以及在系統故障後應該如何恢復狀態是非常重要的。

與演員範式很好地結合在一起的一種方式是事件採購。在這個概念中,你的應用程序的狀態是作爲一系列事件存儲的,而不是狀態本身。當系統或其中的一部分失敗時,可以通過應用來自持久事件存儲的所有事件來恢復狀態。持久郵箱可以是這種活動商店的鏈接,也可以直接使用專門的演員。

Martin Krasser在本博客中有一個很好的article描述這種方法使用阿卡。他還是Akka事件採購擴展的作者,其名稱爲eventsourced

10

是的,您所描述的可以通過使用durable mailboxes來實現,它們可以根據每個參與者的需要進行配置。

對於不同的後端有幾種實現方式,如果你沒有找到你喜歡的消息隊列,那麼它將不會很難實現你自己的適配器。我們將在Akka源代碼樹中維護的唯一實現是FileBasedMailbox,作爲如何執行此操作的模板。 Akka 2.0.x發行版中的其他郵箱類型由其各自的「所有者」維護爲社區項目。