2011-06-10 1 views
10

クラスタにakkaを使用して作成したリモートアクターソフトウェアを導入したいと考えています。システムは、複数のワーカーノードと1つのマスターノードで構成されています。問題は、クラスタノードのIPアドレスを事前に知ることができないことです(しかし、それらはすべて同じサブネットワークの一部です)。ですから、スタートアップ後の全員のIPアドレスを発見し、各ノードで正しいアクターのリファレンスを作成する良い方法が必要です。Akkaリモートアクタサーバの検出

私は、フリーソフトウェアライセンスのもとで配布されているligtweightソリューション(初期セットアップで必要です)を探しています。

答えて

7

私はを作成しましたが、これはあなたの問題を解決することを目的としています(コードを再利用したり、貢献してください)。

どのように動作するかについてのいくつかの言葉。各アクタレジストリ(=ノード)のリモートアクタを開始します。 RegistryActorには、分散セットアップで実行されている他のすべてのレジストリへのリンクがあります。新しいノードがシステムに追加されると、少なくとも1つの他のノード(ActorRegistry)について知り、通知する必要があります。 ActorRegistryは、他のすべてのノードに新しいノードを知らせる(つまり、他のすべてのRegistryActorへのリンクを持つRegistryActor)、そしてアクターへのリンクを交換するプロセスを開始します - その最後で、すべてのアクターレジストリはすべてのアクターシステム内で実行されているローカルまたはリモートのいずれか)。

詳細については、blogpostを参照してください。

1

すべてのノードが共通の知識を共有していない限り、あなたのソリューションはIPブロードキャストに依存しなければならないと思います。ブロードキャストは、サブネット上のすべてのネットワークノードにパケットを送信することとして定義されています。したがって、すべてのワーカーノードがリスンしている間にマスターノードがそれを実行する場合は、事前にIPアドレスを知らなくてもそれらを接続できます。

私はこれをScalaでコーディングしていませんが、javaでメッセージをブロードキャストする方法はかなりわかりやすい例です:http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html同じクラスを使ってScalaに適合させるのは簡単です。

4

jgroupsを見てください。

http://jgroups.org/

それはあなたのすべての基準を満たしている - それは、軽量、オープンソースと非常に成熟し、安定した製品です。

あなたは簡単にあなたの要件に基づいて自動グループ管理と発見のためにそれを設定することができます - それは、ほぼすべてのネットワーク構成をサポートしています - あなたは、グループのメンバーの発見のために、マルチキャスト、共有ファイル、またはユニキャストを使用することができます。

+0

あまりにも良い答えです。私は過去にjgroupsを試してみました。私は満足しています。 – paradigmatic

関連する問題