Nginx を使用してグレースケール リリースを実装する

Nginx を使用してグレースケール リリースを実装する

グレースケールリリースとは、白と黒をスムーズに移行できるリリース方法を指します。 ABテストとは、グレースケールのリリース方法で、一部のユーザーはAを使い続け、一部のユーザーはBを使い始めます。ユーザーがBに異論がなければ、徐々に範囲を広げていき、すべてのユーザーをBに移行させます。

グレースケール リリースにより、システム全体の安定性を確保できます。最初のグレースケール リリース中に問題を発見して調整し、その影響を確認することができます。

グレースケールを解放する方法は、一般的に 3 つあります。

  • Nginx+LUA方式
  • Cookieに基づくグレースケールリリース
  • ソースIPに基づくグレースケールリリース

この記事では主に、Cookie とソース IP に基づいてシンプルなグレースケール パブリッシングを実装する方法について説明します。Nginx + LUA 方式は内容が多すぎるため、この記事では詳しく説明しません。

A/B テストのプロセス

NginxはCookieに基づいてグレースケールリリースを実装します

Cookie クエリによると、Cookie キーはバージョンの値です。Cookie 値が V1 の場合は hilinux_01 に転送されます。V2 の場合は hilinux_02 に転送されます。クッキー値が一致しない場合は、デフォルトでhilinux_01に対応するサーバーが使用されます。

2 つのサーバーは次のように定義されます。

  • hilinux_01 192.168.1.100:8080
  • hilinux_02 192.168.1.200:8080

if命令で実装

アップストリームhilinux_01 {
  サーバー 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}

アップストリームhilinux_02 {
  サーバー 192.168.1.200:8080 max_fails=1 fail_timeout=60;
}

アップストリームデフォルト{
  サーバー 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}

サーバー{
 聞く 80;
 サーバー名 www.hi-linux.com;
 access_log ログ/www.hi-linux.com.log メイン;

 #マッチクッキー
 $group を "default" に設定します。
  $http_cookie の場合、バージョンは V1 です。
    $group hilinux_01 を設定します。
  }

  $http_cookie の場合、バージョンは V2 です。
    $group hilinux_02 を設定します。
  }

 位置 / {            
  proxy_pass http://$グループ;
  proxy_set_header ホスト $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  インデックス index.html index.htm;
 }
 }

マップディレクティブで実装

Nginx でマッピングを構成すると、 $COOKIE_version可以解析出Cookie里面的version字段。 $group は変数であり、{} にはマッピング ルールが含まれます。

バージョン V1 のユーザーがシステムにアクセスする場合、$group は hilinux_01 になります。サーバーで使用する場合、http://hilinux_01 にプロキシされます。バージョン V2 のユーザーがシステムにアクセスする場合、$group は hilinux_02 になります。サーバーで使用する場合、http://hilinux_02 にプロキシされます。クッキー値が一致しない場合は、デフォルトでhilinux_01に対応するサーバーが使用されます。

アップストリームhilinux_01 {
  サーバー 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}

アップストリームhilinux_02 {
  サーバー 192.168.1.200:8080 max_fails=1 fail_timeout=60;
}

アップストリームデフォルト{
  サーバー 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}

$COOKIE_version $group をマップします {
~*V1$ hilinux_01;
~*V2$ hilinux_02;
デフォルト デフォルト;
}

サーバー{
 聞く 80;
 サーバー名 www.hi-linux.com;
 access_log ログ/www.hi-linux.com.log メイン;

 位置 / {            
  proxy_pass http://$グループ;
  proxy_set_header ホスト $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  インデックス index.html index.htm;
 }
 }

Nginxは受信IPに基づいてグレースケールリリースを実装します

内部 IP の場合、リバース プロキシは hilinux_02 (プレリリース環境) に送信されます。そうでない場合は、リバース プロキシは hilinux_01 (本番環境) に送信されます。

アップストリームhilinux_01 {
  サーバー 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}

アップストリームhilinux_02 {
  サーバー 192.168.1.200:8080 max_fails=1 fail_timeout=60;
}

アップストリームデフォルト{
  サーバー 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}

サーバー{
 聞く 80;
 サーバー名 www.hi-linux.com;
 access_log ログ/www.hi-linux.com.log メイン;

 $group のデフォルトを設定します。
 ($remote_addr ~ "211.118.119.11") の場合 {
   $group hilinux_02 を設定します。
 }

位置 / {            
  proxy_pass http://$グループ;
  proxy_set_header ホスト $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  インデックス index.html index.htm;
 }
}

サーバーが 1 台しかない場合は、同じ目的を達成するために、異なる IP アドレスに応じて異なる Web サイト ルート ディレクトリを設定できます。

サーバー{
 聞く 80;
 サーバー名 www.hi-linux.com;
 access_log ログ/www.hi-linux.com.log メイン;

 $rootdir を "/var/www/html" に設定します。
  ($remote_addr ~ "211.118.119.11") の場合 {
    $rootdir を "/var/www/test" に設定します。
  }

  位置 / {
   ルート $rootdir;
  }
}

これで、グレースケール リリースを実装するための最も基本的な方法は終了です。よりきめ細かいグレースケール リリースを実行したい場合は、ABTestingGateway プロジェクトを参照してください。

ABTestingGateway は、Sina のオープン ソースの動的ルーティング システムです。 ABTestingGateway は、動的に転送戦略を設定できるグレースケール リリース システムです。レイヤー 7 で動作し、nginx と ngx-lua に基づいて開発されています。転送戦略データベースとして redis を使用し、動的なスケジューリング機能を実装できます。

ABテストゲートウェイ: https://github.com/CNSRE/ABテストゲートウェイ

参照ドキュメント
http://www.google.com
http://www.jianshu.com/p/88f206f48278
http://blog.chinaunix.net/uid-531464-id-4140473.html

Nginx を使用してグレースケール パブリッシングを実装する方法に関するこの記事はこれで終わりです。Nginx グレースケール パブリッシングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • NginxとLuaによるグレースケールリリースの実装
  • Nginx でグレースケールリリースを実装する 3 つの方法の概要

<<:  Vueはシンプルなスライダー検証を実装する

>>:  MySQL ビューの一貫性を確保する方法の詳細な説明 (チェック オプション付き)

推薦する

MySQL GRANT ユーザー認証の実装

承認とは、ユーザーに特定の権限を付与することです。たとえば、新しく作成したユーザーに、すべてのデータ...

Docker で MySQL をインストールし、リモート接続を実装するチュートリアル

画像をプルする docker プル mysql完成した画像を見る Docker イメージイメージを介...

フレックスマルチカラムレイアウトで発生する問題と解決策の詳細な説明

フレックス レイアウトは間違いなくシンプルで使いやすいです。レイアウトをよりシンプルかつ高速にします...

IDEA の Docker プラグインを介して SpringBoot プロジェクトをデプロイするプロセスの詳細な説明

1. Dockerリモート接続ポートを設定するサーバー上の docker.service ファイルを...

Vue シングルファイルコンポーネントの実装

最近、vue について読みました。これまで基本的に見落としていた単一ファイル コンポーネントを見つけ...

uniappを使用してWeChatミニプログラムでEChartsを使用する方法

今日は、uniapp を使用して Echarts を統合し、マップ チャートを表示します。 mpvu...

Dockerを使用してブログサイトを素早く構築する方法の詳細な説明

目次1. 準備2. 展開プロセス3. アクセステストHalo は、ブログに慣れている学生に追加のオプ...

HTML 要素 noscript の使用の紹介

noscript の定義と使用法noscript 要素は、スクリプトが実行されない場合の代替コンテン...

MySQLで一意のサーバーIDを生成する方法

序文MySQL では、server-id を使用してデータベース インスタンスを一意に識別し、それを...

React を使って小さなプログラムを書くための Remax フレームワークのコンパイル プロセス分析 (推奨)

Remax は、実行時に構文制限のないソリューションを採用した React を使用して小規模なプロ...

よく使用される入力テキストボックスの内容は自動的に垂直方向に中央揃えされ、クリックするとデフォルトのプロンプトテキストは空になります。

3つの機能: 1. コンテンツの垂直方向の自動中央揃え2. デフォルトのプロンプトテキストは灰色で表...

ウェブサイトのBGM実装方法

個々のウェブマスターにとって、自分のウェブサイトをいかにユニークで個性あふれるものにするかは、常に絶...

CSS で TikTok テキスト揺れエフェクトを実装する例

日々の開発において、フロントエンドの学生はアニメーションやデザインについてよく議論します。デザイナー...

Javascript 共通高階関数の詳細

目次1. 一般的な高階関数1.1、フィルター1.2、地図1.3、減らすHigher Order fu...

MySQL における悲観的ロックと楽観的ロック

リレーショナル データベースでは、悲観的ロックと楽観的ロックがリソース同時実行シナリオのソリューショ...