一、方案背景介紹
1. 什么是灰度發(fā)布
灰度發(fā)布是指在 黑和白(0和1)之間,能夠平滑過渡的一種發(fā)布方式。
AB test就是一種灰度發(fā)布方式,指為產(chǎn)品已發(fā)布A版本,在發(fā)布B版本時(shí),在同一時(shí)間維度,
讓一部分用戶繼續(xù)用A版本,一部分用戶開始用B版本,如果用戶對(duì)B版本沒有什么反對(duì)意見,那么逐步擴(kuò)大范圍,把所有用戶都遷移到B版本上面來(lái)?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度發(fā)布時(shí)就可以發(fā)現(xiàn)及調(diào)整問題,以保證其影響度。
1.2 灰度發(fā)布好處
- 降低發(fā)布影響面: 就算出問題,也只會(huì)影響部分用戶,從而可以提前發(fā)現(xiàn)新版本中的 bug,然后在下一次發(fā)布前提前修復(fù),避免影響更多用戶;
- 提升用戶體驗(yàn): 除了能發(fā)現(xiàn) bug,還能很好的收集新版本的用戶使用反饋,從而提前調(diào)整系統(tǒng),提升用戶體驗(yàn),也能給后續(xù)的產(chǎn)品演進(jìn)帶來(lái)參考價(jià)值。
- 可以做到不停機(jī)的熱遷移,版本回滾便捷(速度快)
1.3 背景
針對(duì)我們當(dāng)前現(xiàn)狀,使用灰度發(fā)布的背景:
在目前app完成測(cè)試,準(zhǔn)備上線發(fā)布時(shí)候,就需要運(yùn)維支持了,其中的挑戰(zhàn)點(diǎn)在于如何不影響當(dāng)前在線業(yè)務(wù)的情況下來(lái)進(jìn)行升級(jí)。
系統(tǒng)升級(jí)就會(huì)有風(fēng)險(xiǎn),系統(tǒng)宕機(jī)風(fēng)險(xiǎn),用戶使用習(xí)慣改變而造成用戶流失的風(fēng)險(xiǎn),服務(wù)錯(cuò)誤不可用等等風(fēng)險(xiǎn)。
利用灰度發(fā)布, 降低發(fā)布帶來(lái)的影響,雖然功能都在test環(huán)境測(cè)過,但畢竟沒發(fā)布到prod環(huán)境,如果先讓少部分用戶先使用新版本,提前發(fā)現(xiàn)bug,或者性能問題,提前做好修復(fù),就可以降低新版本帶來(lái)的影響。
其主要思想就是把影響集中到一個(gè)點(diǎn),然后再發(fā)散到一個(gè)面,出現(xiàn)意外情況后很容易就回退,即使影響也是可控的。
二、灰度發(fā)布幾種類型
灰度發(fā)布的主要分類:
- 金絲雀發(fā)布
- 滾動(dòng)發(fā)布
- 藍(lán)綠發(fā)布
1)金絲雀發(fā)布
金絲雀發(fā)布成本較低,只需要一個(gè)實(shí)例即可降低新版本存在的風(fēng)險(xiǎn),適合缺乏足夠的發(fā)布工具研發(fā)能力及成長(zhǎng)型的小公司。但是,金絲雀發(fā)布也有缺點(diǎn),當(dāng)升級(jí)全部剩余實(shí)例時(shí),如果流量過多,可能會(huì)導(dǎo)致服務(wù)中斷。
2)滾動(dòng)發(fā)布
滾動(dòng)發(fā)布則是在金絲雀發(fā)布的基礎(chǔ)上進(jìn)行的改進(jìn)和優(yōu)化,第一次也是使用金絲雀發(fā)布,后續(xù)則使用多批次的形式發(fā)布剩余實(shí)例,每次批次之間會(huì)進(jìn)行觀察,如果有問題,再進(jìn)行回滾。
3)藍(lán)綠發(fā)布
藍(lán)綠發(fā)布比較簡(jiǎn)單,只是對(duì)全量發(fā)布的一種優(yōu)化而已,發(fā)布前不用全部停機(jī),而是另外部署新版本全部實(shí)例,然后再把流量全部再切換到新版本。
三、選型
全量發(fā)布:不建議使用
藍(lán)綠發(fā)布:適合于對(duì)于資源預(yù)算比較充足的業(yè)務(wù),或者是比較簡(jiǎn)單的單體應(yīng)用,可以快速實(shí)現(xiàn)系統(tǒng)的整體變更
金絲雀和全鏈路灰度:適合需要針對(duì)特定用戶或者人群進(jìn)行現(xiàn)網(wǎng)請(qǐng)求驗(yàn)證的業(yè)務(wù),可以顯著減低風(fēng)險(xiǎn)
綜上,建議選擇 金絲雀或者全鏈路灰度 進(jìn)行服務(wù)的升級(jí)發(fā)布。
四、灰度發(fā)布流程及實(shí)現(xiàn)思路
用戶請(qǐng)求————> 網(wǎng)關(guān)----->服務(wù)a----->服務(wù)b
1、用戶會(huì)發(fā)送請(qǐng)求
2、經(jīng)過網(wǎng)關(guān)分發(fā)請(qǐng)求到具體的服務(wù)A
3、服務(wù)A 調(diào)用服務(wù)B
[圖片]
灰度發(fā)布的核心就是路由轉(zhuǎn)發(fā),如果我們能夠自定義網(wǎng)關(guān)到 服務(wù)A 及 服務(wù)A到服務(wù)B中間的路由策略,就可以實(shí)現(xiàn)用戶引流,灰度發(fā)布。
五、幾種實(shí)現(xiàn)方案
1)SpringCloud+Redis 實(shí)現(xiàn)灰度發(fā)布
通過網(wǎng)關(guān)尋找下層服務(wù)之前,通過攔截器處理請(qǐng)求頭的參數(shù)信息,通過判斷Redis數(shù)據(jù)當(dāng)前請(qǐng)求是否符合灰度的要求,如果符合,走灰度服務(wù);否則走正常服務(wù)。
2)Nginx +Lua + Redis 實(shí)現(xiàn)灰度發(fā)布
原理:使用nginx做負(fù)載均衡和反向代理,nginx內(nèi)嵌lua模塊,解析并執(zhí)行l(wèi)ua編寫的腳本邏輯,可以通過lua解析cookie以及訪問redis,而一些灰度發(fā)布分流的策略就是放在redis里通過cookie關(guān)聯(lián)
執(zhí)行過程:
- 當(dāng)用戶請(qǐng)求到達(dá)前段代理服務(wù)nginx,內(nèi)嵌的lua模塊解析nginx配置文件中的lua腳本代碼
- lua變量獲取到客戶端的ip地址,去查詢r(jià)edis緩存內(nèi)是否有該建值,如果有返回值執(zhí)行@client_test,否則執(zhí)行@client
- location @client_test把請(qǐng)求轉(zhuǎn)發(fā)給灰度發(fā)布服務(wù),location@client把請(qǐng)求轉(zhuǎn)發(fā)給正常服務(wù),服務(wù)器返回結(jié)果。
3)Openresty+Lua+Redis灰度發(fā)布
OpenResty 是一個(gè)基于 Nginx 與 Lua 的高性能 Web 平臺(tái),其內(nèi)部集成了大量精良的 Lua 庫(kù)、第三方模塊以及大多數(shù)的依賴項(xiàng),用于方便地搭建能夠處理高并發(fā)、高擴(kuò)展性的動(dòng)態(tài) Web 應(yīng)用、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。
Http協(xié)議的灰度功能主要基于ngx_http_lua_module模塊實(shí)現(xiàn),Tcp協(xié)議的灰度功能主要基于ngx_stream_lua_module模塊實(shí)現(xiàn)。
本系統(tǒng)實(shí)現(xiàn)了對(duì)Http協(xié)議和Tcp協(xié)議的灰度功能,并且提供后臺(tái)管理系統(tǒng)對(duì)灰度白名單進(jìn)行管理。
三種方式灰度實(shí)現(xiàn):
Http協(xié)議灰度實(shí)現(xiàn)如下功能:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-780916.html
- 通過IP或者IP段驗(yàn)證客戶端IP是否灰度白名單;
- 通過獲取header頭中的userid,驗(yàn)證是否灰度白名單;
- 通過獲取header頭中的device-id,驗(yàn)證是否灰度白名單。
TCP協(xié)議灰度實(shí)現(xiàn)如下功能: - 通過IP或者IP段驗(yàn)證客戶端IP是否灰度白名單;
后臺(tái)管理系統(tǒng)實(shí)現(xiàn)如下功能: - 支持對(duì)設(shè)備deviceId灰度白名單新增、刪除和查詢功能;
- 支持對(duì)客戶端IP灰度白名單新增、刪除和查詢功能;
- 支持對(duì)用戶userId灰度白名單新增、刪除和查詢功能,同時(shí)可以根據(jù)配置灰度策略,將滿足條件的用戶自動(dòng)導(dǎo)入灰度白名單中。
說明:
1、當(dāng)用戶請(qǐng)求到達(dá)前端web(代理)服務(wù)器Openresty,內(nèi)嵌的lua模塊解析Nginx配置文件中的lua腳本代碼;
2、Lua獲取客戶端IP地址、userId和設(shè)備ID,去查詢Redis中是否有該鍵值,如果有則轉(zhuǎn)發(fā)到灰度環(huán)境,否則轉(zhuǎn)發(fā)到生產(chǎn)環(huán)境中;
3、后端管理系統(tǒng)提供可視化界面,可以管理redis中的白名單信息,包括:客戶端IP白名單、userId白名單、設(shè)備Id白名單。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-780916.html
到了這里,關(guān)于什么是灰度發(fā)布?灰度發(fā)布幾種類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!