2017-11-11 5 views
0

私は顧客の俳優とテストアクターシステムを持っています。それは顧客の状態を追跡します。イベントメッセージとクエリメッセージはコーディネータに送信されます。メッセージに対してCustomerアクターが存在しない場合、コーディネーターはメッセージを作成します。正常に動作し、次のようになります。Akka.Net Clusterを使用して1つのノードにのみエンティティを持ち、そこにすべてのノードからメッセージが届くようにする方法

standalone

今私は、クラスタリングを追加したいです。私は、システムが多くの顧客にとって十分な大きさであることを望んでおり、ダウンしたときにメッセージを他のノードとして扱うことができます。だから、ちょっと読んで少し微妙なことをした後、私は何をすべきか分かっていたと思ったが、私は誤解しなければならない。これは私のアプローチでした。コーディネーターの上にConsistentHashingPoolアクターを追加しました(顧客IDをキーとして使用)。次に、そのプールクラスタを認識させることによって、顧客とのコーディネーターを他のノードに配布することができます。一方のノードでまだそれはこのようになりますとき:

pool on one node

魅力のように働きました。しかし、その後、クラスタに2番目のノードを追加しました。

on two nodes

これは私が欲しいものではありません:それは、このように見えました。すべての顧客は、それらを代表する2人の俳優を務めました。イベントのいくつかはノード1で終了し、ノード2で終了します。間違った期待がありました。私は、クラスター対応プールが両方のノードに「1つ」として存在することを期待していました。

私の目標を達成するためにはどうすればよいですか?ディスパッチャの役割と州の役割が必要なのでしょうか?しかし、私はまだ2人のディスパッチャーを欲しがっています。私はこのクラスタシングルトンのことを調べるべきですか?シングルトンは簡単にボトルネックになる可能性があります。私はすべてのノードにルータを設置することをお勧めしますが、ルートを共有し、ローカルとリモートを共有します。

答えて

1

あなたが望むものを実現するには、ConsistenHashingクラスタルーターを使用しないでください。そのためにはAkka.Cluster.Shardingという専用機能があります。これはすでにかなりの数のプロジェクトで人々によって使用されています。それについていくつかの記事があります。

  • Official documentation
  • More detailed introduction - 一貫したハッシュは、あなたが望むものではありませんなぜそれがまた、カバーしています。
  • Akka.Cluster.Shardingは実際に私が行方不明になったものを明らかに
+0

おかげで、どのように機能するかにtechnical insightより。私は文書で主題を見て回りましたが、要約(「論理IDを使ってクラスターアクターに連絡したいが、クラスター内の物理的な位置を気にかけたり、自分の作成を管理したくないとき」)私が探していたような音。 –

関連する問題