2017-03-06 4 views
2
  1. クラスタ対応ルーター:ここakkaクラスタ対応ルーターとakkaクラスタシャーディングの異なるユースケース?

    val router = system.actorOf(ClusterRouterPool(
        RoundRobinPool(0), 
        ClusterRouterPoolSettings(
        totalInstances = 20, 
        maxInstancesPerNode = 1, 
        allowLocalRoutees = false, 
        useRole = None 
    ) 
    ).props(Props[Worker]), name = "router") 
    

    は、我々はrouterにメッセージを送ることができますが、メッセージはリモートrouteeの俳優のシリーズに送信されます。

  2. クラスタシャーディング(持続性を考慮していない)

    class NewShoppers extends Actor { 
        ClusterSharding(context.system).start(
        "shardshoppers", 
        Props(new Shopper), 
        ClusterShardingSettings(context.system), 
        Shopper.extractEntityId, 
        Shopper.extractShardId 
    ) 
    
        def proxy = { 
        ClusterSharding(context.system).shardRegion("shardshoppers") 
        } 
    
        override def receive: Receive = { 
        case msg => proxy forward msg 
        } 
    } 
    

    ここで、我々はproxyにメッセージを送ることができ、メッセージはシャードの俳優(別称、エンティティ)のシリーズに送信されます。

だから、私の質問は:あなただけのどんなノードにいくつかの作業を送信し、何らかの処理が起こるしたいときit seems both 2 methods can make the tasks distribute to a lot of actors. What's the design choice of above two? Which situation need which choice?

答えて

3

プールルータは次のようになり、順番に送られた2件のメッセージがありそうまで終了しません同じ俳優で処理する

クラスタシャーディングは、あるアクターの一意のIDを持っていて、1つのノードに収まらないものがたくさんありますが、そのIDを持つすべてのメッセージが常にアクターそのid。たとえば、Userをエンティティとしてモデル化する場合、そのユーザーに関するすべてのコマンドをユーザーに伝えたいが、クラスタトポロジが変更された場合(ノードの削除または追加)にはアクタを移動し、ノード。

+0

次に、一貫したハッシュプールルーターはどうですか?クラスターシャーディングとの違いは? – lagom

+0

これは、トポロジが同じである限り、同じノードに作業を送信します。変更すると、ハッシュがノードの完全なセットを超えているため、別のノードに送信を開始する可能性があります。それはルートに何らかの方法で通知するわけではないので、あなたはまだこの方法でidによって俳優に対処できませんでした。 – johanandren

+2

この記事:[Akka.Clusterアプリケーションの状態の配布](https://petabridge.com/blog/akkacluster-state-distribution/?utm_source=tuicool&utm_medium=referral)とjohanandrenの回答の私の質問。 – lagom

関連する問題