2016-10-23 19 views
1

Akka.Netクラスタには単一のActorSystemが必要ですが、同期または非同期の調整が必要なActorSystems(分散アプリケーション)が複数ある場合はどうなりますか?Akka.Net:2つ以上の独立したクラスタ間で通信するための最良の方法は何ですか?

共有メッセージライブラリの処理方法は?おそらく、(generic message library以外の)何も共​​有しないようにし、DynamicJsonMessageBaseのような動的メッセージを使用するのが最善でしょう。

サービス検出の処理方法は?

背景:私はAkka.Netを使用して、おそらくLighthouseを発見に使用し、REST HTTP APIをバックエンドのエージェント/ポータルに使用し、非アクターサービスにメッセージを送受信するためのトランスポートメカニズムを組み込んでいます。

答えて

1

通常、クラスタは複数のアクターシステムで構成されています。しかし、Akka.NETでは、クラスタは異種である可能性があります。つまり、実行された操作とロードされたアセンブリに関して、ノード(アクターシステム)が互いに異なる場合があります。この点を区別するために、各アクターシステムを異なるロールセットで構成することができます。

クラスタロールは、クラスタ内のコードを更新するときにノード間の通信を制限するためにも使用できます。古いコードのノードは更新されたノードと通信しようとしません。これにより、クラスタをシャットダウンすることなく増分更新を実行できます。

サービスの発見は、Consul、Azure Service Fabric、etcd、またはZookeeperなどのサービスを既に有効にしているサードパーティのプロバイダを使用すると最も効果的です。

+0

私は、ActorSystemはクラスタごとにしか存在しないことを理解しています。 – alturium

+0

すべてのアクターシステムは、クラスター内で同じ名前を共有する必要があります。しかし、クラスタ自体は複数のマシンにまたがることができるはずです(そうでなければどのクラスタですか?)。それは、単一のプロセス内にただ1つの 'ActorSystem'を持つことを達成するのは難しいことです。 – Horusiath

+0

質問はあなたのポイントに従うクラスタ内ではないクラスタ間のコミュニケーションや移送に関するものです。しかし、私はあなたが質問のポイントを見逃していると思います。 – alturium

関連する問題