9

昨日、チームと一緒に、シングル ページ アプリケーションをサポートするためにゼロ ダウンタイム デプロイを使用する可能性について話し合っていました。

それについて話し合っているうちに、1 つのエッジ ケースを特定しました。ユーザーがブラウザにページをロードすると、ページをリロードするまでメモリから削除できません。つまり、ユーザーがページをロードして Web サイトで作業を開始した場合 (たとえば、私が今行っているように長い記事を入力し始めた場合)、ページをリロードするまで、更新されたバージョンを受け取ることができません。

ユーザーのブラウザに古いバージョンのアプリケーションが表示されるという事実は無視できますが、以下に示す 2 つの点があります。

  1. スパを提供するために使用される HTTP Api に重大な変更を導入した場合、ユーザーは記事を保存できなくなったり (データ損失!)、他のバックエンド関連のアクションを実行したときに他のエラーを受け取ったりする可能性があります。
  2. ユーザーが SPA をリロードせずに新しいページに移動すると、次のページのテンプレートまたは外部の古いコンテナーと互換性のないコントロールのテンプレートを受け取ることができます。マークアップやアプリケーション ロジックの破損につながる可能性があります。
  3. ユーザーが記事を入力している途中である可能性があるため、ユーザーに再ログインを強制することはできません。これは単に悪い UX です。

これらすべての点を考慮に入れると、次の解決策を提案できます。

  1. ユーザー 1 は、SPA の v1 をブラウザーにロードします。
  2. 認証トークンとともに、バージョン情報がブラウザーに送信されます (たとえば、JWT を使用)。
  3. アプリケーションの v2 バージョンをデプロイしたいと考えています。v2 バージョンをスピンアップしますが、v1 を無効にしません。
  4. ユーザー 2 は、SPA の v2 を自分のブラウザーに読み込みます
  5. ユーザー 1 は、SPA の次のページに移動します。ロード バランサーはトークンのバージョン情報をチェックし、ユーザー 1 のトラフィックを v1 サーバーにルーティングします。
  6. ユーザー 2 は、同じ方法で v2 にルーティングされます。
  7. ユーザー 1 がアプリをログアウトし、ブラウザーを閉じます。
  8. ユーザー 1 は再度ログインします。今回は v2 を受け取ります。
  9. v1 アプリケーションが長時間トラフィックを受信しないと、破棄されます。

ただし、このアプローチでは、2 つ以上の複数のバージョンを有効にすることができます (たとえば、ユーザーが 1 日か 2 日オンラインでいる場合)。これは、最後のユーザーがログアウトするまで、データベースを新しいスキーマに移行できないことを意味します (Facebook などのサイトでどのように機能するかをイメージしてください)。複数のバージョンを使用することは問題ではありませんが、Docker や Rancher などのツールを使用すると簡単に行うことができます。

また、ステップ 7 では、ユーザーはページをリロードするか、ブラウザーを閉じる必要があります。そうしないと、ユーザーはまだ v1 で作業しているため、次のバージョンに強制することはできません。

私が持っている質問は、シングル ページ アプリケーションのゼロ ダウンタイム/Blue-Green デプロイを行うためにどのようなアプローチを使用するかということです。

特に既存の「ブルー」クライアント アプリケーションに関して、トラフィックを「グリーン」バージョンに切り替えるときに、アプリケーションの「ブルー」バージョンの有効期間をどのように管理しますか。

これらの問題を解決しましたか、他の解決策を知っていますか?

4

4 に答える 4

0

常に学習曲線が必要なため、UI の完全なオーバーホールを行う理由がわかりません。実際には、新しい UI にすぐに切り替えることはお勧めできません。顧客が一定期間にわたって新しいインターフェイスに切り替えることを許可し、事前の警告の後、古いバージョンを無効にします。そのようなリアルタイムの切り替えを行う努力に値するものではありません。A/B テストは、顧客に新しいインターフェースを紹介し、実際のロールアウトを行う方法になる可能性があります。

于 2018-01-26T16:02:19.430 に答える
-2

あなたが説明している手法は、ブルーグリーン展開と呼ばれます。既存のサーバー (青) から開始し、更新されたサーバー (緑) を追加します。その時点以降のすべての新しいトラフィックは、グリーン環境にリダイレクトされます。青の環境は、既存の http 接続にサービスを提供するためだけに存在し、緑の環境で重大な問題が発生した場合のオプションの「ロールバック」のためにも存在します。最終的に、「ブルー」環境は、すべてのリクエストの処理が終了した時点で廃止できます。

この手法では、2 つのシステムが多少似ている必要があります。たとえば、データベース スキーマによっては、実用的でない場合があります。

于 2016-10-05T11:31:17.297 に答える