2017-03-05 87 views
0

假設我們有大量持久性Person actor,每個actor都有一個標識和一個名稱參數。什麼將是在集羣中分發這些演員,以這樣的方式的最佳途徑:使用Akka的分佈式DDD實體

  • 新的演員已經任命了戰略X(循環賽,一致性哈希等)
  • 一個節點「協調員」演員包含身份ActorRef
  • 映射
  • 一個或多個節點可以失敗,受影響的演員都對其他節點恢復
  • 沒有SPF

我認爲以下,這沒有按看起來不像解決問題:

  • Cluster sharding;所有參與者均被初始化並由協調者創建
  • 集羣感知路由;組或池是固定的大小,不能動態修改

回答

0

聽起來像你幾乎完全是描述Akka集羣分片,並沒有足夠的信息來看看爲什麼它不適合。

處理這種設計問題的常見解決方案是在分片實體的未初始化狀態下,它只接受包含所需值的初始化命令(如CreateUser(id, name)之類的東西),當它獲得它切換到其「正常」行爲。

另一種選擇可能是引入一箇中間actor,如果你沒有辦法改變你的Person actor的設計,那麼這個中間actor就不會啓動實際的actor,直到它提取了名字值。

Ofc。您也可以直接下載到Akka集羣API並構建與您的用例完全匹配的內容,但處理集羣拓撲更改(添加,刪除節點等)的重新分發遠不是微不足道的。

我認爲你也會意識到,如果沒有與您的業務邏輯緊密結合的分片解決方案,爲您的實體實現這種完全非侵入式的工具非常困難。