2017-09-26 7 views
1

私は、Akka(特にリモートおよびクラスターパッケージ)を使用してオープンソース分散経済シミュレーションプラットフォームを構築しています。このようなシミュレーションの主要なボトルネックは、アクター間のコミュニケーションパターンがシミュレーションの過程で進化し、アクターが多くのメッセージをクラスター内のノード間でワイヤーを介して送信することです。Akkaクラスタシャーディング:通信パターンに基づいて移動するアクターシャード

他のノードのアクターと大きく通信しているノード上のアクタを検出し、他のノードに移動させるメカニズムを探しています。これは既存のAkkaクラスタシャーディング機能を使用して可能ですか?おそらくこれはthisだから、彼の答えは "自動俳優の木の分割"の意味はRoland Kuhnです。

答えて

0

独自のロジックに従ってシャードを移動するには、カスタムShardAllocationStrategyを実装します。

あなただけのこれらの2つの方法を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]] 

最初のものは新しいシャードを割り当てる際に選択されますどの領域を決定し、あなたにすでに割り当てられ破片を提供します。 2番目は定期的に呼び出され、どのシャードを別の地域に再調整するかを制御できます(たとえば、あまりにもバランスがとれていない場合など)。

どちらの関数もFutureを返します。つまり、必要な情報(たとえば、アクター間の親和性情報を持つアクター)を取得するために別のアクターを照会することもできます。

アフィニティ自体については、自分で何かを実装する必要があると思います。たとえば、アクターは送信者ノードに関する統計を収集し、それを定期的にクラスターシングルトンに送信して、どのアクターを同じノードに移動すべきかを決定することができます。

関連する問題