9

Erlang でマスタースレーブ アプリケーションを作成したいと考えています。アーキテクチャに必要な次のことを考えています。

  • マスターが停止したときにスレーブが停止するのではなく、マスターがダウンしている間に再接続を試みます。

  • リモートノードが自動的に接続しない場合、またはダウンしている場合、マスターはリモートノードを自動的に起動する必要があります (おそらくOTPでのスーパーバイザーの動作) 。

これを行うための OTP 指向の動作はありますか? でリモートノードを起動でき、slave:start_link()でノードを監視できることerlang:monitor()は知っていますが、これをどのように動作に組み込むことができるかわかりませんgen_server

4

2 に答える 2

1

erlang:monitor_nodeの使用と分散アプリケーションの使用に関するコメントに同意します。

スレーブモジュールを使用してそれを実現することはできません。「マスターによって開始されたすべてのスレーブノードは、マスターが終了すると自動的に終了します」と明確に示されています。

現在、それを行うためのOTP動作もありません。監視ツリーは階層的です; アプリケーションロジックの観点から階層があるものを探しているように見えますが、スポーンはピアツーピアベース(または視点によっては個別ベース)で行われます。

複数のErlangVMを使用する場合は、実行する数を慎重に検討する必要があります。多数のVMを使用すると、OSプロセスの入出力が原因でパフォーマンスの問題が発生する可能性があります。最高のパフォーマンスを得るための経験則は、CPUコアごとに1つ以下のOSプロセス(つまり、1つのErlang VM)を持つことを目指すことです。

于 2011-01-03T19:21:49.983 に答える
1

他の実装の研究に興味がある場合、Basho のriak_coreフレームワークは、分散型分散アプリケーションをかなりうまく取り入れています。

riak_core_node_watcher.erlには、興味深いノード観測コードのほとんどが含まれています。

検索すると、フレームワークに関する講演やプレゼンテーションがかなりあることがわかります。

于 2011-01-10T14:48:29.533 に答える