藍(lán)綠部署、金絲雀發(fā)布(灰度發(fā)布)、AB測試……
點(diǎn)擊上方藍(lán)色“小哈學(xué)Java”,選擇“設(shè)為星標(biāo)” 回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!
來源 | https://www.jianshu.com/p/0df88fe4a1e3
隨著微服務(wù)架構(gòu)的普及,線上服務(wù)越來越多,隨之而來的就是部署越來越頻繁;隨著互聯(lián)網(wǎng)行業(yè)的興旺,產(chǎn)品迭代的頻率也是越來越快,服務(wù)上線速度逐步提升。有上線、有部署,就有風(fēng)險(xiǎn)。有風(fēng)險(xiǎn),就對業(yè)務(wù)有影響,然后就有了一系列減少這種風(fēng)險(xiǎn)的部署方案:藍(lán)綠部署、金絲雀發(fā)布(灰度發(fā)布),也有適應(yīng)產(chǎn)品迭代頻率的AB測試。
本文主要是簡單解釋下這幾個(gè)概念,幫助自己理解,如果有錯(cuò)誤,請大佬們斧正。
藍(lán)綠部署
藍(lán)綠色部署是一種通過運(yùn)行兩個(gè)相同的稱為 BLUE 和 GREEN 的生產(chǎn)環(huán)境來減少停機(jī)時(shí)間和降低風(fēng)險(xiǎn)的技術(shù)。
藍(lán)綠部署,以顏色命名,簡單的理解就是,線上有兩套集群環(huán)境,在架構(gòu)圖中,一套標(biāo)記成藍(lán)色,稱為藍(lán)色集群BLUE;一套標(biāo)記為綠色,稱為綠色集群GREEN。通過將流量引入兩個(gè)集群,完成系統(tǒng)升級切換。

blue_green_deployments.png
步驟一:部署綠色集群,這個(gè)時(shí)候是初始狀態(tài),藍(lán)色集群承擔(dān)全部責(zé)任,接收全部流量,等待被替換。綠色集群剛剛部署,還沒有投入使用,流量為0,等待驗(yàn)證和上線。
步驟二:藍(lán)色集群流量不變,向綠色集群引入流量。這個(gè)過程可以分成幾個(gè)階段完成。第一個(gè)階段,引入少量非實(shí)時(shí)流量,僅用于數(shù)據(jù)測試;第二個(gè)階段,引入全部實(shí)時(shí)流量,用于做系統(tǒng)驗(yàn)證。
步驟三:切斷向藍(lán)色集群引入流量,將全部流量引入綠色集群。這個(gè)時(shí)候,綠色集群已經(jīng)承擔(dān)全部責(zé)任,接收全部流量。這個(gè)過程也可以分階段操作。第一個(gè)階段,平衡藍(lán)色和綠色集群流量,也就是藍(lán)色和綠色集群一同承擔(dān)職責(zé);第二個(gè)階段,切斷藍(lán)色集群流量,流量全部寫入綠色集群。是否采用分階段操作,完全看升級的功能是否是破壞性的,是否可兼容。
步驟四:監(jiān)控系統(tǒng)運(yùn)行,這個(gè)過程是必要的。因?yàn)闆]有人能夠保證測試時(shí)100%的覆蓋的,所以新集群可能會出現(xiàn)這樣那樣、或大或小的問題,如果評估需要回滾,就需要將全部流量切換到藍(lán)色集群。也完成了版本回滾。
金絲雀發(fā)布(灰度發(fā)布)
金絲雀發(fā)布,與藍(lán)綠部署不同的是,它不是非黑即白的部署方式,所以又稱為灰度發(fā)布。它能夠緩慢的將修改推廣到一小部分用戶,驗(yàn)證沒有問題后,再推廣到全部用戶,以降低生產(chǎn)環(huán)境引入新功能帶來的風(fēng)險(xiǎn)。

canarydeployment.png
步驟一:將流量從待部署節(jié)點(diǎn)移出,更新該節(jié)點(diǎn)服務(wù)到待發(fā)布狀態(tài),將該節(jié)點(diǎn)稱為金絲雀節(jié)點(diǎn);
步驟二:根據(jù)不同策略,將流量引入金絲雀節(jié)點(diǎn)。策略可以根據(jù)情況指定,比如隨機(jī)樣本策略(隨機(jī)引入)、狗糧策略(就是內(nèi)部用戶或員工先嘗鮮)、分區(qū)策略(不同區(qū)域用戶使用不同版本)、用戶特征策略(這種比較復(fù)雜,需要根據(jù)用戶個(gè)人資料和特征進(jìn)行分流,類似于千人千面);
步驟三:金絲雀節(jié)點(diǎn)驗(yàn)證通過后,選取更多的節(jié)點(diǎn)稱為金絲雀節(jié)點(diǎn),重復(fù)步驟一和步驟二,直到所有節(jié)點(diǎn)全部更新
AB測試
AB測試和上面兩種發(fā)布方式不是一個(gè)范圍的概念,它是為了進(jìn)行效果驗(yàn)證的手段,其他兩種是為了實(shí)現(xiàn)線上平穩(wěn)發(fā)布的手段,這里把他們放在一起說,是因?yàn)檫@三個(gè)概念很容易弄混。
AB測試是線上同時(shí)運(yùn)行多個(gè)不同版本的服務(wù),這些服務(wù)更多的是用戶側(cè)的體驗(yàn)不同,比如頁面布局、按鈕顏色,交互方式等,通常底層業(yè)務(wù)邏輯還是一樣的,也就是通常說的換湯不換藥。

abtesting.png
這個(gè)沒有具體的步驟(也可以采用金絲雀部署的步驟,只不過不是全量更新),根據(jù)策略(這個(gè)策略可以是金絲雀分布中的策略一致),將一部分流量引入A版本,另外一部分流量引入B版本,也可能出現(xiàn)CDEF版本。然后相關(guān)人員通過分析不同版本的實(shí)際效果,選出最優(yōu)解。最優(yōu)解可能是一個(gè)版本獲勝,取代另一個(gè)版本,也可能是催生出更多的版本,服務(wù)于用戶,還有可能是多個(gè)版本在不同區(qū)域同時(shí)提供服務(wù)。
最后
這里總結(jié)一下:
| 名稱 | 特點(diǎn) | 優(yōu)勢 | 劣勢 |
|---|---|---|---|
| 藍(lán)綠部署 | 同時(shí)存在兩個(gè)集群,兩個(gè)集群中只有一個(gè)集群真正提供服務(wù),另外一個(gè)集群測試、驗(yàn)證或待命 | 服務(wù)文檔,版本回退簡單,適用于各種場景的升級,大版本不兼容升級的或迭代兼容升級 | 浪費(fèi)硬件資源,需要同時(shí)有兩個(gè)集群,如果集群比較大,比如有1000個(gè)節(jié)點(diǎn),這種方式幾乎不可用 |
| 金絲雀部署 | 逐點(diǎn)部署,逐步替換線上服務(wù) | 小步快跑,快速迭代 | 只能適用于兼容迭代的方式,如果是大版本不兼容的場景,就沒辦法使用這種方式了 |
AB測試和上面兩個(gè)不是一個(gè)范疇,不做比較。但是需要說明的一點(diǎn),AB測試可以采用上面兩種部署方式的手法。
參考:Using Blue-Green Deployment to Reduce Downtime and Risk
Blue Green Deployment
Blue-green Deployments, A/B Testing, and Canary Releases
Canary Release
1. 把VS Code打造成Java開發(fā)IDE,也挺爽!
最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點(diǎn)“在看”,關(guān)注公眾號并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。
謝謝支持喲 (*^__^*)


