ゼロダウンタイムに関するこの記事から、いくつかの興味深い解決策を見つけました。その記事でいくつかの解決策だけを強調したいと思います。
1. A / Bスイッチ:(ローリングアップグレード+フォールバックメカニズム)
スタンバイモードのノードのセットが必要です。新しいバージョンをそれらのノードにデプロイし、トラフィックを即座にそれらのノードに切り替えます。古いノードを元の状態に保つと、インスタントロールバックも実行できます。ロードバランサーはアプリケーションの前にあり、要求に応じてこのスイッチを担当します。
短所:アプリケーションを実行するためにXサーバーが必要な場合は、このアプローチでは2Xサーバーが必要です。
2.ゼロダウンタイム
このアプローチでは、一連のマシンを保持しません。むしろ、ポートバインディングを遅らせます。共有リソースの取得は、アプリケーションが起動するまで遅延されます。アプリケーションの起動後にポートが切り替えられ、古いバージョンも(アクセスポイントなしで)実行され続け、必要に応じて即座にロールバックされます。
3.並列展開– Apache Tomcat :( Webアプリケーションのみ)
Apache Tomcatは、バージョン7リリースに並列デプロイメント機能を追加しました。2つのバージョンのアプリケーションを同時に実行し、最新バージョンをデフォルトとして使用します。
4.遅延ポートバインディング:
ここで提案するのは、ポートをバインドせずに、基本的にコネクタを起動せずにサーバーを起動する機能です。後で、別のコマンドが起動してコネクタをバインドします。ソフトウェアのバージョン2は、バージョン1が実行されていて、すでにバインドされているときに展開できます。後でバージョン2を開始するときに、バージョン1のバインドを解除してバージョン2をバインドできます。このアプローチでは、ノードは数秒間だけ事実上オフラインになります。
5.高度なポートバインディング:
神話を破ることによって:'<code>アドレスはすでに使用されています'、*古いプロセスと新しいプロセスの両方が同じポートにバインドされます。ONモードのSO_REUSEPORTオプションを使用すると、2つ(またはそれ以上)のプロセスを同じポートにバインドできます。新しいプロセスがポートにバインドされたら、古いプロセスを強制終了します。
SO_REUSEPORTオプションは、次の2つの問題に対処します。
アプリケーションバージョンの切り替え間の小さな不具合:ノードは常にトラフィックを処理できるため、ダウンタイムがゼロになります。
改善されたスケジューリング:

要約すれば:
遅延バインディングとポートの再利用の両方を組み合わせることで、ダウンタイムを効果的にゼロにすることができます。また、スタンバイプロセスを維持すれば、インスタントロールバックも実行できるようになります。