隨著企業(yè)數(shù)字化轉(zhuǎn)型進(jìn)程不斷發(fā)展,云原生時(shí)代的來(lái)臨,企業(yè)應(yīng)用越來(lái)越多,不得不面對(duì)應(yīng)用程序升級(jí)的巨大挑戰(zhàn)。傳統(tǒng)的停機(jī)發(fā)布方式,新舊版本應(yīng)用切換少則停機(jī)30分鐘,多則停機(jī)10小時(shí)以上,愈發(fā)無(wú)法滿足業(yè)務(wù)端的需求。
“業(yè)務(wù)無(wú)感知”的發(fā)布策略成為應(yīng)用運(yùn)維團(tuán)隊(duì)的不二選擇,盡可能降低發(fā)布對(duì)業(yè)務(wù)的影響。“業(yè)務(wù)無(wú)感知”的發(fā)布策略有滾動(dòng)發(fā)布、藍(lán)綠發(fā)布、灰度發(fā)布。
本文將從什么是灰度發(fā)布,發(fā)布類(lèi)型,灰度發(fā)布自動(dòng)化實(shí)踐三個(gè)維度來(lái)展開(kāi)。
01. 灰度發(fā)布的概念
灰度發(fā)布,又名金絲雀發(fā)布,即在產(chǎn)品發(fā)布時(shí),先讓一小部分用戶體驗(yàn)產(chǎn)品新版本的特性,這一小部分用戶的用戶范圍可以是內(nèi)部用戶、測(cè)試用戶和非核心用戶,但主要用戶還是繼續(xù)使用產(chǎn)品舊版本
新版本發(fā)布完成之后,驗(yàn)證業(yè)務(wù)及用戶反饋是否正常,一切正常之后再逐步擴(kuò)大新版本覆蓋范圍:20%、50%、70%,每發(fā)布一次就進(jìn)行業(yè)務(wù)驗(yàn)證、觀察用戶反饋。最后用新版本覆蓋所有用戶,完成一次灰度發(fā)布。
灰度發(fā)布的最大優(yōu)勢(shì)是將新版本使用范圍控制在小范圍內(nèi),如果新版本出現(xiàn)問(wèn)題,能夠極大降低問(wèn)題影響范圍,避免影響所有用戶,造成嚴(yán)重的生產(chǎn)故障,引發(fā)大范圍的投訴,從而影響到公司業(yè)務(wù)和品牌。
02. 發(fā)布類(lèi)型
1)滾動(dòng)發(fā)布:是指一個(gè)應(yīng)用有多個(gè)主機(jī)副本,將其分成多個(gè)批次。首先升級(jí)第一個(gè)批次,之后依次升級(jí)其他批次,直到所有批次升級(jí)完成。每個(gè)批次升級(jí)前,需要在LB中移除對(duì)應(yīng)主機(jī)的流量轉(zhuǎn)發(fā),升級(jí)完成后,再恢復(fù)對(duì)應(yīng)主機(jī)的流量轉(zhuǎn)發(fā)。
將應(yīng)用分成多個(gè)批次,升級(jí)前后的LB操作工作量比較大,對(duì)應(yīng)用運(yùn)維人員來(lái)說(shuō)操作麻煩,手工操作出錯(cuò)的概率較大,嘉為藍(lán)鯨應(yīng)用發(fā)布中心,通過(guò)自動(dòng)化流程實(shí)現(xiàn)應(yīng)用的滾動(dòng)發(fā)布。
同時(shí),嘉為藍(lán)鯨應(yīng)用發(fā)布中心支持隨機(jī)分批和自定義分批兩種方式的滾動(dòng)發(fā)布。選擇分批方式后,在批次內(nèi)可以選擇串行和并行的執(zhí)行方式
2)藍(lán)綠發(fā)布:是指應(yīng)用分為兩個(gè)版本,發(fā)布時(shí)將舊版本所有流量直接切換到新版本上。新版本部署時(shí),按照舊版本的規(guī)格完全獨(dú)立部署一套,部署完成之后,進(jìn)行簡(jiǎn)單測(cè)試驗(yàn)證,正常之后將舊版本的流量直接導(dǎo)到新版本上。
3)灰度發(fā)布:是指應(yīng)用分為兩個(gè)版本,發(fā)布時(shí)將舊版本的流量,分階段10%、30%、80%、100%切換到新版本上。每階段切換后,任務(wù)需要暫停,應(yīng)用運(yùn)維人員可以檢查程序是否正常,監(jiān)控日志是否正常,同步業(yè)務(wù)方檢查業(yè)務(wù)指標(biāo)是否正常。確認(rèn)一切正常之后,執(zhí)行下一部分發(fā)布動(dòng)作。
03. 灰度發(fā)布自動(dòng)化實(shí)踐
場(chǎng)景一:基于F5設(shè)備進(jìn)行藍(lán)綠發(fā)布的場(chǎng)景
用戶通過(guò)F5設(shè)備控制業(yè)務(wù)流量,將業(yè)務(wù)流量轉(zhuǎn)發(fā)到后端真實(shí)應(yīng)用服務(wù)上。為了保證升級(jí)時(shí)用戶能夠正常訪問(wèn),需要進(jìn)行藍(lán)綠發(fā)布。
在進(jìn)行藍(lán)綠發(fā)布時(shí),分成三個(gè)發(fā)布步驟:
通過(guò)標(biāo)準(zhǔn)運(yùn)維自動(dòng)化執(zhí)行切換F5流量的命名,如下:
關(guān)鍵參數(shù)通過(guò)變量傳入,該標(biāo)準(zhǔn)運(yùn)維流程可以被多個(gè)業(yè)務(wù)系統(tǒng)復(fù)用,無(wú)需每個(gè)業(yè)務(wù)系統(tǒng)單獨(dú)編排。
場(chǎng)景二:基于Nginx進(jìn)行灰度發(fā)布的場(chǎng)景
用戶通過(guò)Nginx代理或者負(fù)載均衡設(shè)備來(lái)控制業(yè)務(wù)流量的轉(zhuǎn)發(fā),為了提高應(yīng)用升級(jí)的穩(wěn)定性,升級(jí)后先讓部分用戶體驗(yàn)新版本,通過(guò)標(biāo)準(zhǔn)運(yùn)維腳本命令切換Nginx中流量轉(zhuǎn)發(fā)策略,將小部分隨機(jī)用戶流量轉(zhuǎn)發(fā)到新版本服務(wù)上。
確認(rèn)新版本功能正常后,逐步擴(kuò)大新版本覆蓋的用戶范圍。避免在藍(lán)綠發(fā)布中,新版本異常會(huì)影響到所有用戶訪問(wèn)的問(wèn)題。
大部分用戶訪問(wèn)業(yè)務(wù)正常,驗(yàn)證了新版本的穩(wěn)定性,再讓新版本覆蓋所有用戶,完成基于Nginx的灰度發(fā)布。
具體標(biāo)準(zhǔn)運(yùn)維任務(wù)參考:
場(chǎng)景三:容器應(yīng)用灰度發(fā)布的場(chǎng)景
容器應(yīng)用在升級(jí)時(shí),為了保證業(yè)務(wù)無(wú)感知,應(yīng)用運(yùn)維人員也需要考慮灰度發(fā)布方案,將一次完成的發(fā)布流程,拆分成多個(gè)發(fā)布流程,降低每一次應(yīng)用發(fā)布的影響范圍。
容器發(fā)布場(chǎng)景,應(yīng)用一般通過(guò)ingress-nginx或者istio控制流量分發(fā),每次發(fā)布更新ingress中的權(quán)重參數(shù),實(shí)現(xiàn)不同流量比例的切換。
在這個(gè)場(chǎng)景中,先部署新應(yīng)用的deploy和service,然后部署ingress,切20%流量到新應(yīng)用,此時(shí)發(fā)布任務(wù)暫停,業(yè)務(wù)人員進(jìn)行應(yīng)用檢查和驗(yàn)證。驗(yàn)證業(yè)務(wù)正常之后,再切換40%、70%、100%應(yīng)用到新應(yīng)用上,完成容器應(yīng)用場(chǎng)景的灰度發(fā)布。
場(chǎng)景四:容器應(yīng)用多地域灰度發(fā)布的場(chǎng)景
業(yè)務(wù)應(yīng)用在全國(guó)多個(gè)省市都有部署,在進(jìn)行升級(jí)時(shí),分地域進(jìn)行灰度升級(jí)。
先升級(jí)華東地域應(yīng)用,華東地域內(nèi)串行發(fā)布,確保業(yè)務(wù)能夠正常穩(wěn)定發(fā)布成功;然后依次升級(jí)華中地域、華南地域、華北地域、西南地域、港澳臺(tái)地域,地域內(nèi)并行發(fā)布執(zhí)行。
場(chǎng)景五:K8s集群版本灰度升級(jí)的場(chǎng)景
K8s不支持跨大版本進(jìn)行升級(jí),如果考慮一個(gè)個(gè)小版本的升級(jí)會(huì)非常麻煩,每次小版本升級(jí)對(duì)應(yīng)用運(yùn)維人員來(lái)說(shuō)都是非常大的挑戰(zhàn)。因此一個(gè)自動(dòng)化、業(yè)務(wù)無(wú)感知的K8s集群版本灰度升級(jí)是非常關(guān)鍵的。
業(yè)務(wù)端通過(guò)APISIX或者Istio控制業(yè)務(wù)流量。首先自動(dòng)化部署v1.24版本的K8s集群,然后在v1.24版本集群中部署容器應(yīng)用,通過(guò)APISIX灰度遷移少部分業(yè)務(wù)流量,驗(yàn)證業(yè)務(wù)的可用性和穩(wěn)定性,慢慢將所有應(yīng)用灰度遷移到新版本集群。所有應(yīng)用遷移完成后,將v1.16版本K8s集群下線資源回收。
灰度發(fā)布方案,只是嘉為藍(lán)鯨應(yīng)用發(fā)布中心產(chǎn)品支持的一個(gè)企業(yè)級(jí)發(fā)布場(chǎng)景,其他場(chǎng)景還包含:緊急部署、持續(xù)部署、大規(guī)模變更、應(yīng)用上線等場(chǎng)景,還支持與DevOps、ITSM集成實(shí)現(xiàn)研運(yùn)一體化、工單驅(qū)動(dòng)變更等功能。詳細(xì)產(chǎn)品功能架構(gòu)如下:
嘉為藍(lán)鯨應(yīng)用發(fā)布中心核心優(yōu)勢(shì)如下:
SRE轉(zhuǎn)型:銀行SRE模式推廣策略
查看詳細(xì)
從設(shè)備到數(shù)據(jù):存儲(chǔ)監(jiān)控的關(guān)鍵與實(shí)踐
查看詳細(xì)
AI破圈爆火!殊不知運(yùn)維才是幕后“定海神針”!
查看詳細(xì)
AI賦能DevOps:智能排錯(cuò)、代碼修復(fù)與需求生成,打造高效開(kāi)發(fā)新范式!
查看詳細(xì)
LLMOps+DeepSeek:大模型升級(jí)一體化運(yùn)維
查看詳細(xì)
DeepSeek賦能企業(yè)研發(fā):DevOps+AI 新時(shí)代再升級(jí)!
查看詳細(xì)
申請(qǐng)演示