應(yīng)用程序升級(jí)面臨最大挑戰(zhàn)是新舊業(yè)務(wù)切換,將軟件從測(cè)試的最后階段帶到生產(chǎn)環(huán)境,同時(shí)要保證系統(tǒng)不間斷提供服務(wù)。
長(zhǎng)期以來,業(yè)務(wù)升級(jí)漸漸形成了幾個(gè)發(fā)布策略:藍(lán)綠發(fā)布、灰度發(fā)布和滾動(dòng)發(fā)布,目的是盡可能避免因發(fā)布導(dǎo)致的流量丟失或服務(wù)不可用問題。
一、 藍(lán)綠發(fā)布
項(xiàng)目邏輯上分為AB組,在項(xiàng)目系統(tǒng)時(shí),首先把A組從負(fù)載均衡中摘除,進(jìn)行新版本的部署。B組仍然繼續(xù)提供服務(wù)。
當(dāng)A組升級(jí)完畢,負(fù)載均衡重新接入A組,再把B組從負(fù)載列表中摘除,進(jìn)行新版本的部署。A組重新提供服務(wù)。
最后,B組也升級(jí)完成,負(fù)載均衡重新接入B組,此時(shí),AB組版本都已經(jīng)升級(jí)完成,并且都對(duì)外提供服務(wù)。
特點(diǎn)
- 如果出問題,影響范圍較大;
- 發(fā)布策略簡(jiǎn)單;
- 用戶無感知,平滑過渡;
- 升級(jí)/回滾速度快。
缺點(diǎn)
- 需要準(zhǔn)備正常業(yè)務(wù)使用資源的兩倍以上服務(wù)器,防止升級(jí)期間單組無法承載業(yè)務(wù)突發(fā);
- 短時(shí)間內(nèi)浪費(fèi)一定資源成本;
- 基礎(chǔ)設(shè)施無改動(dòng),增大升級(jí)穩(wěn)定性。
藍(lán)綠發(fā)布在早期物理服務(wù)器時(shí)代,還是比較昂貴的,由于云計(jì)算普及,成本也大大降低。
二、 灰度發(fā)布
灰度發(fā)布只升級(jí)部分服務(wù),即讓一部分用戶繼續(xù)用老版本,一部分用戶開始用新版本,如果用戶對(duì)新版本沒什么意見,那么逐步擴(kuò)大范圍,把所有用戶都遷移到新版本上面來。
特點(diǎn)
- 保證整體系統(tǒng)穩(wěn)定性,在初始灰度的時(shí)候就可以發(fā)現(xiàn)、調(diào)整問題,影響范圍可控;
- 新功能逐步評(píng)估性能,穩(wěn)定性和健康狀況,如果出問題影響范圍很小,相對(duì)用戶體驗(yàn)也少;
- 用戶無感知,平滑過渡。
缺點(diǎn)
- 自動(dòng)化要求高
部署過程
- 從LB摘掉灰度服務(wù)器,升級(jí)成功后再加入LB;
- 少量用戶流量到新版本;
- 如果灰度服務(wù)器測(cè)試成功,升級(jí)剩余服務(wù)器。
灰度發(fā)布是通過切換線上并存版本之間的路由權(quán)重,逐步從一個(gè)版本切換為另一個(gè)版本的過程。
三、 滾動(dòng)發(fā)布
滾動(dòng)發(fā)布是指每次只升級(jí)一個(gè)或多個(gè)服務(wù),升級(jí)完成后加入生產(chǎn)環(huán)境,不斷執(zhí)行這個(gè)過程,直到集群中的全部舊版本升級(jí)新版本。
- 紅色:正在更新的實(shí)例
- 藍(lán)色:更新完成并加入集群的實(shí)例
- 綠色:正在運(yùn)行的實(shí)例
特點(diǎn)
- 用戶無感知,平滑過渡;
- 節(jié)約資源。
缺點(diǎn)
- 部署時(shí)間慢,取決于每階段更新時(shí)間;
- 發(fā)布策略較復(fù)雜;
- 無法確定OK的環(huán)境,不易回滾。
部署過程
- 先升級(jí)1個(gè)副本,主要做部署驗(yàn)證;
- 每次升級(jí)副本,自動(dòng)從LB上摘掉,升級(jí)成功后自動(dòng)加入集群;
- 事先需要有自動(dòng)更新策略,分為若干次,每次數(shù)量/百分比可配置;
- 回滾是發(fā)布的逆過程,先從LB摘掉新版本,再升級(jí)老版本,這個(gè)過程一般時(shí)間比較長(zhǎng);
- 自動(dòng)化要求高。
小結(jié)
綜上所述,三種方式均可以做到平滑式升級(jí),在升級(jí)過程中服務(wù)仍然保持服務(wù)的連續(xù)性,升級(jí)對(duì)外界是無感知的。那生產(chǎn)上選擇哪種部署方法最合適呢?這取決于哪種方法最適合你的業(yè)務(wù)和技術(shù)需求。如果你們運(yùn)維自動(dòng)化能力儲(chǔ)備不夠,肯定是越簡(jiǎn)單越好,建議藍(lán)綠發(fā)布,如果業(yè)務(wù)對(duì)用戶依賴很強(qiáng),建議灰度發(fā)布。如果是K8S平臺(tái),滾動(dòng)更新是現(xiàn)成的方案,建議先直接使用。
- 藍(lán)綠發(fā)布:兩套環(huán)境交替升級(jí),舊版本保留一定時(shí)間便于回滾。
- 灰度發(fā)布:根據(jù)比例將老版本升級(jí),例如80%用戶訪問是老版本,20%用戶訪問是新版本。
- 滾動(dòng)發(fā)布:按批次停止老版本實(shí)例,啟動(dòng)新版本實(shí)例。