灰度發佈是指在黑與白之間,可以平滑過渡的一種發佈方式。AB test就是一種灰度發佈方式,讓一部分用戶繼續用A,一部分用戶開始用B,若是用戶對B沒有什麼反對意見,那麼逐步擴大範圍,把全部用戶都遷移到B上面 來。灰度發佈能夠保證總體系統的穩定,在初始灰度的時候就能夠發現、調整問題,以保證其影響度。
灰度發佈通常有三種方式 nginx+lua,nginx根據cookie分流,nginx 根據權重來分配
nginx+lua根據來訪者ip地址區分,因爲公司出口是一個ip地址,會出現訪問網站要麼都是老版,要麼都是新版,採用這種方式並不適合
nginx 根據權重來分配,實現很簡單,也能夠嘗試
nginx根據cookie分流,灰度發佈基於用戶才更合理
兩臺服務器分別定義爲
tts_V6 192.168.3.81:5280
tts_V7 192.168.3.81:5380
默認服務器爲:
default:192.168.3.81:5280
前端nginx服務器監聽端口80,須要根據cookie轉發,查詢的cookie的鍵(key)爲tts_version_id(該鍵由開發負責增長),若是該cookie值(value)爲tts1則轉發到tts_V6,爲tts2則轉發到tts_V7。
upstream tts_V6 {
server 192.168.3.81:5280 max_fails=1 fail_timeout=60;
}
upstream tts_V7 {
server 192.168.3.81:5380 max_fails=1 fail_timeout=60;
}
upstream default {
server 192.168.3.81:5280 max_fails=1 fail_timeout=60;
}
server {
listen 80;
server_name test.taotaosou.com;
access_log logs/test.taotaosou.com.log main buffer=32k;
#match cookie
set $group "default";
if ($http_cookie ~* "tts_version_id=tts1"){
set $group tts_V6;
}
if ($http_cookie ~* "tts_version_id=tts2"){
set $group tts_V7;
}
location / {
proxy_pass http://$group;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
index index.html index.htm;
}html
}前端