簡體   English   中英

Akka集群分片:基於通信模式的活動演員分片

[英]Akka cluster-sharding: moving actor shards based on communication patterns

我正在使用Akka(尤其是遠程和群集軟件包)構建開源的分布式經濟模擬平台。 這種模擬中的一個關鍵瓶頸在於,參與者之間的通信模式會隨着模擬過程的發展而變化,並且參與者往往會最終通過集群中節點之間的線路發送消息負載。

我正在尋找一種機制來檢測某個節點上與其他節點上的actor進行大量通信的actor,並將它們移至該另一個節點。 使用現有的Akka群集分片功能是否有可能? 或許,這就是羅蘭·庫恩的意思是“自動演員樹分區”是他的回答這個 SO問題。

通過實現自定義ShardAllocationStrategy可以根據自己的邏輯移動碎片。

您只需要擴展ShardAllocationStrategy並實現這兩種方法:

def allocateShard(requester: ActorRef, shardId: ShardId, 
  currentShardAllocations: Map[ActorRef, immutable.IndexedSeq[ShardId]])
  : Future[ActorRef]

def rebalance(currentShardAllocations: Map[ActorRef,
  immutable.IndexedSeq[ShardId]], rebalanceInProgress: Set[ShardId])
  : Future[Set[ShardId]]

第一個確定分配新分片時將選擇哪個區域,並為您提供已分配的分片。 第二個被定期調用,讓您控制哪些碎片可以重新平衡到另一個區域(例如,如果它們變得太不平衡)。

這兩個函數都返回一個Future,這意味着您甚至可以查詢另一個actor以獲取所需的信息(例如,具有actor之間親和力信息的actor)。

對於親和力本身,我認為您必須自己實現一些功能。 例如,參與者可以收集有關其發送者節點的統計信息,並將其定期發布到集群單例中,從而確定哪些參與者應移至同一節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM