6

EC2 スポット インスタンスでいくつかのアプリケーションを実行しています。このようなインスタンスは、Amazon によって予告なしに強制終了される可能性があります。

シャットダウン プロセスでは、プロセスが何らかの順序で強制終了されます。サーバーがシャットダウンしているか、プロセスがクラッシュしたかによって動作が異なる監視/回復プログラムがあります。(具体的には、サーバーが実際にシャットダウンしている場合は何もしたくありません)

シャットダウンのためにプロセスが強制終了されたことを回復プロセスで (まだ生きている場合) 検出するにはどうすればよいですか?

(システムの詳細: 外部状態を変更しないサンドボックスで不明/信頼できない/などのコードを実行しています。通常、サンドボックス化されたコードがクラッシュした場合、それは信頼できないコードの作成者の責任であり、再実行しません。しかし、 VM のシャットダウンまたは障害が原因で、サンドボックス化されたコードが終了した場合、別のインスタンスで再実行する必要があります.私が現在抱えている問題は、ユーザーのコードが最初に終了されたため、監視プログラムがクラッシュがユーザーエラーであると誤って認識していることです. .)

4

4 に答える 4

5

エージェント

サンドボックスの子プロセスを生成する各マシンでエージェントを実行します。エージェントは「クラッシュ防止」のコードを実行し、サンドボックス コードはクラッシュする可能性のあるユーザー コードを実行します。

新しいサンドボックス プロセスで新しいマシンを開始することを担当する監視システムは、どのプロセスが強制終了されたかをチェックします (エージェントとサンドボックス プロセスの両方、またはサンドボックスの子プロセスのみ)。

これは、子プロセスについて問い合わせるエージェントへの TCP 接続 (RMI/RPC/HTTP) を開くことによって行われます。エージェントが応答した場合 - マシンはまだ実行中であり、その子サンドボックス プロセスについて尋ねることができます。エージェントが応答しない場合 - マシンが終了した疑いがあります。

エージェント (バリエーション)

エージェントは、クラッシュした場合に同じ VM で子サンドボックス プロセスを再起動することも担当します。

検索サービス

ルックアップ サービス (Zoo Keeper など) を使用して、どのプロセスがハートビート キープアライブを送信したかを追跡します。エージェントが動作している場合、マシンはまだ実行されています。エージェントが動作していない場合、マシンは実行されていません。

EC2 API

EC2 API をポーリングして、マシンが実行中か終了状態かを判断します。

于 2012-06-02T07:42:23.453 に答える
2

回復プロセスはどのように機能しますか?

waitpidプロセスを監視するために使用している場合は、終了時に次のことを判断できます。

  • プロセスが正常に終了したかどうか、プロセスが正常に終了した場合に返されたステータス、または
  • シグナルが原因で終了したかどうか、およびそのシグナルが何であったか。

プロセスのシャットダウン方法に応じて、プロセスが正常に終了するか、または経由で終了することを期待していSIGTERMますSIGKILLSIGILLSIGABRTSIGFPESIGBUSSIGSEGV、およびSIGSYSは、プログラミング エラーによるクラッシュを示します。

于 2012-05-31T00:30:43.660 に答える
1

それは非常に脆弱なスキームのように聞こえます。システムの状態を検出しようとしないでください。アプリの「クリーンな」シャットダウン/停止/停止に続いて、何らかの方法でアプリケーションに有効性トークンを書き出させて (そして関連するファイルを同期させてください!)、それを使用してください。

于 2012-05-21T23:25:18.230 に答える
0

インスタンスがシャットダウンしているときに、監視プロセスが SIGTERM シグナルを受け取ると思います。

したがって、次のようなことが可能でしょうか-IF監視対象プロセスが終了し、次の5秒以内にSIGTERMシグナルが受信されない-プロセスがクラッシュしたと仮定します。SIGTERM を受信した場合は、単純にシグナル ハンドラを終了します。

于 2012-06-05T16:48:19.330 に答える