我剛剛開始與阿卡,我試圖分裂一些凌亂的功能在更易於管理的部分,每個將由不同的演員進行。Stateless Akka actors
我的任務似乎恰恰適合演員模型。我有一個對象樹,它們保存在數據庫中。每個節點都有一些屬性;讓'專注於一個,並稱之爲財富。孩子的財富取決於父母的財富。當一個人計算節點上的財富時,這應該引發對孩子的類似計算。我想收集所有更新的節點實例並將它們同時保存在數據庫中。
這似乎很簡單:一個actor只執行計算,然後爲當前節點的每個子節點啓動另一個actor。當所有的孩子回覆一條帶有計算結果的消息時,這個角色收集他們,添加當前節點並向他之上的演員發送消息。
問題是,我不知道一種方法來確保一個人收到所有孩子的消息。一個簡單的方法就是使用一個計數器,並且每當來自孩子的消息到達時增加計數器。
但是如果系統的兩個獨立部分需要執行這樣的計算並重復使用同一個actor,會發生什麼情況?演員會產生兩倍的孩子,並且計數將不再可靠。我需要的是確保同一個actor不會從外部系統重用,但是每次觸發計算時都會生成新的actor。
這甚至可能嗎?如果不是,阿卡有沒有一種自動機制來確保每個孩子都完成了自己的任務?
我只是在這裏不適合使用演員模型嗎?基本上,我所做的只不過是可以用函數完成的 - 演員本身是無狀態的,但它們允許我簡化並行計算。
想要同時保存所有更新節點的原因是什麼? – Larsenal
另外,樹的近似大小是多少?關於多少個節點?通常有多深? – Larsenal
@Larsenal爲了保持一致性,我必須將所有節點保存在單個事務中。當然,我可以打開一個事務,開始保存節點,然後關閉它。但我更喜歡讓所有內容都具有透明度,並在最後進行一次保存操作 - 除此之外,它更容易測試。關於樹的大小,它不會很深,通常只有3層。但它可能相當大。在這個發展階段提供硬數據爲時尚早,但我預計在第二階段將會有數百或數千個節點,每個節點只有少數幾個孩子。 – Andrea