11

私がこれまでに見たすべてのErlangスーパーバイザーの例では、通常、ツリー全体を監視する「マスター」スーパーバイザーがいます(または少なくともスーパーバイザーツリーのルートノードです)。「マスター」スーパーバイザーが壊れた場合はどうなりますか?「マスター」-スーパーバイザーはどのように監視されるべきですか?典型的なパターンはありますか?

4

3 に答える 3

12

最上位のスーパーバイザは、アプリケーションの start/2 コールバックで start_link を使用して開始されます。これは、アプリケーション プロセスとリンクすることを意味します。アプリケーション プロセスが最上位のスーパーバイザから終了信号を受信すると、次の 2 つのいずれかを実行します。

  1. アプリケーションが永続的なアプリケーションとして開始された場合、ノード全体が終了しました (そして、HEART を使用して再起動された可能性があります)。

  2. アプリケーションが実行を停止する一時的なものとしてアプリケーションが開始された場合、再起動の試行は行われません。

于 2011-04-18T09:23:01.193 に答える
4

通常、スーパーバイザーは、他のプロセスを「のみ」監視するように設定されています。スーパーバイザーによって実行されるユーザー作成コードがないため、クラッシュする可能性はほとんどありません。

もちろん、これを強制することはできません...そのため、典型的なパターンは、スーパーバイザーにアプリケーション固有のロジックを持たないことです...それは監視するだけで、他には何もしません。

于 2011-04-18T08:48:53.007 に答える
3

良い質問。私は、すべての例とチュートリアルがほとんど問題を無視していることに同意する必要があります。

信頼性が必要な場合は、少なくとも 2 台のコンピューターを使用し、相互に監視するようにします。OTP で実際にそれを実装する方法は (ドキュメントとチュートリアルの現在の状態で) ですが、十分に隠されているものと秘密のものの間のどこかにあるようです。

于 2011-04-18T18:46:03.663 に答える