いくつかのnode.jsサービスをリファクタリングしています。プロセスがクラッシュした場合、それらはすべて、仮想サーバー上でforever
で開始されていたため、再起動するだけでした。
さて、コンテナ化されたステートレスのアプリケーション構造に移行すると、プロセスは終了し、障害が発生するとコンテナを再起動する必要があると思います。
あれは正しいですか?利点または欠点はありますか?
私のテイクは、コンテナ内プロセスのスーパーバイザー(永久に、pm2)を使用せず、代わりに--restart=always
(またはそのオプションの他のフレーバーの1つ)。これは、ドッカーの全体的な哲学とより密接に関係しており、ドッカーコンテナの実行が非常に速くなるため、コンテナ内プロセスの監視と非常によく似た動作をするはずです。
私が見たコンテナ内プロセスの監視を実行するための最も強力な擁護者は、このトピックの他の位置を探索したい場合、 phusion baseimage-docker README にあります。
--restart=always
をフェイルセーフとして使用することをお勧めしますが、コンテナーの再起動は比較的遅くなります(単純なHello World Nodeサーバーの説明 hereで5秒以上) )。したがって、forever
などを使用してアプリのダウンタイムを最小限に抑えることができます。
コンテナ内でプロセスを再起動することのマイナス面は、クラッシュリカバリが2つの方法で発生する可能性があり、監視などに影響する可能性があることです。
複数のCPUを搭載したサーバーで実行している場合、ノードはクラスタリングのセットアップが必要です。
PM2を使用すると、余分なコードを記述することなく、それを取得できます。 http://pm2.keymetrics.io/docs/usage/cluster-mode/
単一のCPUインスタンスで多数のサーバーを使用している場合を除き、PM2を運用環境で使用すると言います。
pm2はdockerよりも再起動が速くなります