問題タブ [erlang-supervisor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
erlang - Erlang プロセス (スーパーバイザーの動作) を分散するには?
スーパーバイザーの動作を実行する Erlang アプリケーションがあります。今、私はそれを異なるノードに分散させたいと考えています。つまり、監視対象のプロセスは異なるコンピューターで実行する必要があります。
OTP のドキュメントを読みましたが、これを行うようにアプリを構成する方法を把握していません。
現在、.app
ファイルは次のようになっています。
名前付き Erlang VM を実行している 2 台のコンピューターがある場合、両方のコンピューターで supervised_processes を実行するようにアプリを構成するにはどうすればよいですか?
architecture - Google の分散型監視モデルのアーキテクチャ
Google の従業員が、インフラストラクチャに同等の監視モデルを構築しているため、Google は Erlang の監視モデルから恩恵を受けないだろうと話している興味深い投稿をオンラインで読みました。
(完全な開示: 私は Google で働いており、erlang も好きです) Erlang には、堅牢性と並行性のための優れた機能があります。ないのは型の安全性であり、パフォーマンスの高い方法でテキストを処理するのはひどいものです。したがって、これらのいずれも気にせず、堅牢性と並行性だけを気にするのであれば、Erlang は優れています。ここでErlangについての内部議論がありましたが、結果はそうでした。基本的に、インフラストラクチャで Erlangs 監視モデルを基本的に複製しましたが、すべての言語に対してそれを行っただけで、Erlang はパフォーマンスに何の利点ももたらしませんでした。
ソース: http://erlang.org/pipermail/erlang-questions/2013-August/075135.html
オンラインで検索しても、彼らの監督モデルに関する情報を見つけることができません (間違った検索用語を使用して検索している可能性が最も高いです)。
質問:
- Google の監視モデルのアーキテクチャはどのようなものですか?
- Google が公開したイノベーションの多くは、後に同じ機能を提供するオープン ソース ソフトウェアに引き継がれました (例: Google BigTable -> HBase、MapReduce -> Hadoop など)。Netflixの出展者は、上記の引用で言及されている Google の監視インフラストラクチャに期待されるすべての役割を果たしますか?
erlang - Erlang スーパーバイザの終了動作
2 つのトップレベル スーパーバイザを起動するアプリケーションが異常な状況である可能性があります。
どちらも{one_for_one, 0, 1}
再起動戦略を持っています。それらの子crash
は、bad_match エラーをスローする単純な関数を実装します。
私の質問には、sup1_child1:crash()
スーパーバイザーを呼び出すsup1
と終了しますが、アプリケーションは実行され続けます (つまり、スーパーバイザーsup2
とその子は引き続き使用できます)。代わりに呼び出すとsup2_child1:crash()
、アプリケーション全体が終了します。この後者の動作は、どちらの場合も私が期待するものです。呼び出しの順序を反転するstart_link()
と、つまり、
sup1 をクラッシュするとアプリケーションは終了しますが、sup2 をクラッシュしても終了しません。したがって、start_link() が呼び出される順序によって、どのスーパーバイザー クラッシュによってアプリケーションが終了するかが決まるようです。これは期待されていますか?それとも、ルート スーパーバイザを 2 つ持つことで、スーパーバイザ ツリー機能を悪用していますか?
ありがとう、
リッチ
erlang - 監視対象プロセスが終了しても失敗しないテストを作成する
さまざまなスーパーバイザー戦略がどのように機能するかを説明するために、ExUnit でいくつかのテストを作成しています。生成されたプロセスを意図的に失敗させ、再起動されたプロセスの出力をテストすることで、結果をテストすることを計画していました。
これまでのところ、最初のプロセスの失敗によってテストが失敗するため、合格するテストを作成できませんでした。Supervisor/GenServer の実装とテストの実装の両方でエラー (try/catch) をキャプチャしようとしましたが、エラーをキャプチャしてテストの失敗を回避することはできませんでした。
- テストの失敗を引き起こさないように、これらのエラーをキャプチャする方法はありますか?
- 異なるスーパーバイザー戦略をテストするためのより良い/異なる手段はありますか?
ありがとう!
erlang - erlangでサーバーを再起動せずに新しく追加されたスーパーバイザーを起動するには?
リモートノードでサーバーを実行しています。ここで、サーバーを停止せずに新しい機能 (gen_* によって実装) を追加したいと考えています。そこで、rpc:call(Node, my_sup, start_link, []) を使用してスーパーバイザを起動します。しかし残念ながら、スーパーバイザーがリモート ノードではなくローカル シェルにリンクされており、rpc:call の直後に失敗しました (sup プロセスが強制終了されました)。
新しく追加されたスーパーバイザーを動的かつリモートで起動する方法は他にあるのでしょうか?