私はゼロからのダウンタイムに関してこのarticleから興味深い解決策を見つけました。私はその記事ではほんの少しの解決策を強調したいと思います。
1. A/Bスイッチ:(ローリング+フォールバック機構アップグレード)
我々は、モードによって立っ内のノードのセットを有するべきです。これらのノードに新しいバージョンを導入し、トラフィックを即座に切り替えます。古いノードを元の状態に保つと、インスタントロールバックも実行できます。ロードバランサはアプリケーションの前にあり、要求に応じてこのスイッチの役割を担います。
短所:あなたはあなたのアプリケーションを実行するためにXサーバが必要な場合は、ヨンは2Xサーバこのアプローチのを必要としています。
2.ゼロダウンタイム
このアプローチにより、我々はマシンのセットを保持しません。むしろポートバインドを遅らせることになります。共有リソースの取得は、アプリケーションが起動するまで遅延します。アプリケーションの起動後にポートが切り替えられ、必要に応じて旧バージョンも(アクセスポイントなしで)実行されて即座にロールバックされます。
3.パラレル展開 - Apache Tomcatの:(唯一のWebアプリケーションの場合)
Apache Tomcatが彼らのバージョン7リリースに並列展開機能を追加しました。彼らは、アプリケーションの2つのバージョンを同時に実行させ、最新バージョンをデフォルトとして使用します。結合
4.遅延ポート:
我々がここで提案するには、コネクタを起動せずに、本質的にポートを結合し、せずにサーバを起動する機能です。その後、別のコマンドが開始され、コネクターがバインドされます。ソフトウェアのバージョン2は、バージョン1が実行され、すでにバインドされている間に展開できます。後でバージョン2を起動すると、バージョン1をバインド解除してバージョン2をバインドできます。この方法では、ノードは数秒間だけ効果的にオフラインになります。
5.高度なポートバインディング:
神話を壊すことによって「Address already in use
」、*両方の古いプロセス&新しいプロセスが同じポートにバインドします。 ONモードのSO_REUSEPORTオプションを使用すると、2つ(またはそれ以上)のプロセスを同じポートにバインドできます。新しいプロセスがポートにバインドしたら、古いプロセスを強制終了します。
SO_REUSEPORTオプションアドレス二つの問題:
アプリケーションのバージョンの切り替えの間に小さなグリッチ:ノードが効果的に私たちにダウンタイムゼロを与えて、トラフィックのすべての時間を提供することができます。
改善されたスケジューリング:概要で
![enter image description here](https://i.stack.imgur.com/Nn1I1.png)
:両方後半結合とポートがを再利用し組み合わせることにより
、我々は事実上ゼロダウンタイムを実現することができます。スタンバイプロセスを維持すると、インスタントロールバックも実行できるようになります。