1

global_groupモジュールを使用してノードをグループに分割する Erlang のサポート。さらに、Erlang はノードネットワークへのオンザフライでのノードの追加をサポートしています。これら 2 つの機能は相互に使用できますか?
私の知る限り、グローバル グループを使用するには、起動時にすべてのノードに名前を付ける必要があります。

4

2 に答える 2

2

ノードは、コマンド ライン フラグ -name (長い名前) または -sname (短い名前) を使用して名前が付けられた、実行中の Erlang ランタイム システムです。

非表示ノードは、コマンド ライン フラグ -hidden で開始されるノードです。非表示ノードと他のノード間の接続は推移的ではなく、明示的に設定する必要があります。また、隠しノードは、nodes() によって返されるノードのリストには表示されません。代わりに、nodes(hidden) または nodes(connected) を使用する必要があります。これは、たとえば、global が追跡している一連のノードに隠しノードが追加されないことを意味します。

つまり、はい、ノードに名前を付けて、他のノードがそれを見つけられるようにする必要があります。

試さずに尋ねているか、非常に複雑な質問をしているように感じます。達成しようとしていることの例があれば、より良い答えを出すことができるかもしれません.

于 2008-10-25T10:50:19.070 に答える
1

global_group sourceを見ると、ノードのリストは、同期時にノードによってチェックされる構成の一部です。

ただし、ノード リストの変更を処理するエクスポートされた関数global_group:global_groups_changedがあります。

これはkernel:config_change ( Module:config_change/3を参照) から呼び出されるため、リリース アップグレード (OTP 組み込みシステム スタイル) 中に新しいノードを global_group に追加することは確かに可能です ( 「アプリケーション仕様の更新」を参照) 。

単純にできるかもしれません:

application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [ { global_groups, [GroupTuple|GroupTuples] } ], [], [] )

すでに global_groups 構成があると仮定するか、または

application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [], [{ global_groups, [GroupTuple|GroupTuples] }], [] )

global_groups を、まだ存在していないクラスターに構成する場合。

各ノードで上記を実行する必要があり、プロセス中に同期することを決定した場合、構成の違いの行が分割されます。(リリース アップグレード中の同期については、 global_group ソースのコメントを参照してください)

しかし、それがすべて完了したら、

global_group:sync()

すべてが再び機能するはずです。

上記のレシピは試していませんが、美味しそうです。^_^

于 2010-04-29T11:31:19.937 に答える