自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

DevOps 發(fā)布策略簡介

安全
DevOps追求更短的迭代周期、更高頻的發(fā)布。但發(fā)布的次數(shù)越多,引入故障的可能性就越大。更多的故障將會降低服務(wù)的可用性,進而影響到客戶體驗。所以,為了保證服務(wù)質(zhì)量,守好發(fā)布這個最后一道關(guān),阿里逐步發(fā)展出了適應(yīng)DevOps要求的發(fā)布策略。

 [[410211]]

前言

DevOps追求更短的迭代周期、更高頻的發(fā)布。但發(fā)布的次數(shù)越多,引入故障的可能性就越大。更多的故障將會降低服務(wù)的可用性,進而影響到客戶體驗。所以,為了保證服務(wù)質(zhì)量,守好發(fā)布這個最后一道關(guān),阿里逐步發(fā)展出了適應(yīng)DevOps要求的發(fā)布策略。

在開始講述阿里的實踐之前,我們先簡單介紹下幾種常見發(fā)布策略,以及它們適用的場景和優(yōu)缺點。

一 常見發(fā)布策略

1 停機發(fā)布

停機發(fā)布會在發(fā)布以前關(guān)閉服務(wù),停止用戶訪問,然后一次性的升級所有服務(wù)。這種發(fā)布策略的發(fā)布頻率往往比較低,且需要在發(fā)布之前做好充足的測試。

停機發(fā)布的特點有:

所有需要升級的組件被整合到一次發(fā)布中
一個項目中的大部分應(yīng)用都會被更新
發(fā)布之前的研發(fā)流程和測試流程往往需要花很長的時間
發(fā)布時如果出現(xiàn)問題, 修復(fù)和回滾的成本很高
完成一次停機發(fā)布, 需要花費很久的時間, 且需要很多團隊在一起才能完成
往往需要客戶端和服務(wù)器端同步升級
停機發(fā)布并不適合互聯(lián)網(wǎng)公司,因為兩次發(fā)布的間隔很久,從功能特性提出到進入市場的時間太長,對市場反應(yīng)不敏感,會在充分競爭的市場里處于下風。每次發(fā)布因為要停機,也會帶來經(jīng)濟損失。

優(yōu)勢:

簡單,不太需要考慮新舊版本共存時的兼容性問題
劣勢:

發(fā)布過程中,服務(wù)不可用
只能在業(yè)務(wù)低峰期 (往往是夜間)發(fā)布,并且需要很多團隊在一起工作
出現(xiàn)故障后很難回滾
適合場景:

開發(fā)測試環(huán)境
非關(guān)鍵應(yīng)用,用戶影響面小
兼容性比較難管控的場景

2 金絲雀發(fā)布

金絲雀發(fā)布這個術(shù)語源自20世紀初期,當時英國的煤礦工人在下井采礦之前,會把籠養(yǎng)的金絲雀攜帶到礦井中,如果礦井中一氧化碳等有毒氣體的濃度過高,在影響礦工之前,金絲雀相比人類表現(xiàn)的更加敏感快速,金絲雀中毒之后,煤礦工人就知道該立刻撤離。金絲雀發(fā)布是在將整個軟件的新版本發(fā)布給所有用戶之前,先發(fā)布給部分用戶,用真實的客戶流量來測試,以保證軟件不會出現(xiàn)嚴重問題,降低發(fā)布風險。

在實踐中,金絲雀發(fā)布一般會先發(fā)布到一個小比例的機器,比如 2% 的服務(wù)器做流量驗證,然后從中快速獲得反饋,根據(jù)反饋決定是擴大發(fā)布還是回滾。金絲雀發(fā)布通常會結(jié)合監(jiān)控系統(tǒng),通過監(jiān)控指標,觀察金絲雀機器的健康狀況。如果金絲雀測試通過,則把剩余的機器全部升級成新版本,否則回滾代碼。

優(yōu)勢:

對用戶體驗影響較小,在金絲雀發(fā)布過程中,只有少量用戶會受影響
發(fā)布安全能夠得到保障
劣勢:

金絲雀的機器數(shù)量比較少, 有一些問題并不能夠暴露出來
適用場景:

監(jiān)控比較完備且與發(fā)布系統(tǒng)集成

3 灰度/滾動發(fā)布

灰度發(fā)布是金絲雀發(fā)布的延伸,是將發(fā)布分成不同的階段/批次,每個階段/批次的用戶數(shù)量逐級增加。如果新版本在當前階段沒有發(fā)現(xiàn)問題,就再增加用戶數(shù)量進入下一個階段,直至擴展到全部用戶。

灰度發(fā)布可以減小發(fā)布風險,是一種零宕機時間的發(fā)布策略。它通過切換線上并存版本之間的路由權(quán)重,逐步從一個版本切換為另一個版本。整個發(fā)布過程會持續(xù)比較長的時間, 在這段時間內(nèi),新舊代碼共存,所以在開發(fā)過程中,需要考慮版本之間的兼容性,新舊代碼共存不能影響功能可用性和用戶體驗。當新版本代碼出現(xiàn)問題時,灰度發(fā)布能夠比較快的回滾到老版本的代碼上。

結(jié)合特性開關(guān)等技術(shù),灰度發(fā)布可以實現(xiàn)更復(fù)雜靈活的發(fā)布策略。

優(yōu)勢:

用戶體驗影響比較小, 不需要停機發(fā)布
能夠控制發(fā)布風險
劣勢:

發(fā)布時間會比較長
需要復(fù)雜的發(fā)布系統(tǒng)和負載均衡器
需要考慮新舊版本共存時的兼容性
適用場景:

適合可用性較高的生產(chǎn)環(huán)境發(fā)布

4 藍綠發(fā)布

藍綠部署是指有兩個完全相同的、互相獨立的生產(chǎn)環(huán)境,一個叫做“藍環(huán)境”,一個叫做“綠環(huán)境”。其中,綠環(huán)境是用戶正在使用的生產(chǎn)環(huán)境。當要部署一個新版本的時候,先把這個新版本部署到藍環(huán)境中,然后在藍環(huán)境中運行冒煙測試,以檢查新版本是否正常工作。如果測試通過,發(fā)布系統(tǒng)更新路由配置,將用戶流量從綠環(huán)境導(dǎo)向藍環(huán)境,藍環(huán)境就變成了生產(chǎn)環(huán)境。這種切換通常在一秒鐘之內(nèi)就能搞定。如果出了問題,把路由切回到綠環(huán)境上,再在藍環(huán)境中調(diào)試,找到問題的原因。因此,藍綠部署可以做到僅僅一次切換,立刻就向所有用戶推出新版本,新功能對所有用戶立刻生效可見。

優(yōu)勢:

升級切換和回退速度非???br /> 零停機時間
不足:

一次性的全量切換,如果發(fā)布出現(xiàn)問題, 會對用戶產(chǎn)生比較大的影響
需要兩倍的機器資源
需要中間件和應(yīng)用自身支持熱備集群的流量切換
適用場景:

機器資源比較富余或者按需分配 (背靠云廠商)

5 A/B 測試

A/B 測試和灰度發(fā)布非常像,可以從發(fā)布的目的上進行區(qū)分。AB測試側(cè)重的是根據(jù)A版本和B版本的差異進行決策,最終選擇一個版本進行部署。和灰度發(fā)布相比,AB測試更傾向于去決策,和金絲雀發(fā)布相比,AB測試在權(quán)重和流量的切換上更靈活。

舉個例子,某功能有兩個實現(xiàn)版本 A 和 B,通過細粒度的流量控制,把 50% 的用戶總是引導(dǎo)到 A 實現(xiàn)上,把剩下的 50% 用戶總是引導(dǎo)到 B 實現(xiàn)上,通過比較 A 實現(xiàn)和 B 實現(xiàn)的轉(zhuǎn)化率,最終選擇轉(zhuǎn)化率較高的 A 實現(xiàn)作為功能的最終版本。

優(yōu)勢:

快速實驗?zāi)芰?br /> 用戶體驗影響小
可以使用生產(chǎn)環(huán)境流量做測試
可以針對某些特定用戶做測試
不足:

需要較為復(fù)雜的業(yè)務(wù)流量識別和控制能力
需要考慮較為復(fù)雜的新舊版本兼容性問題
適用場景:

用來做業(yè)務(wù)探索和創(chuàng)新測試
需要對多個方案進行決策

6 流量隔離環(huán)境發(fā)布

在上述的發(fā)布策略中,發(fā)布的單位都是應(yīng)用,但是一個功能模塊往往是由多個應(yīng)用組合在一起提供的服務(wù),即使當前發(fā)布的應(yīng)用出現(xiàn)了異常,這個異常也未必體現(xiàn)在當前應(yīng)用中,在復(fù)雜的情況下,異常會延遲到它的下游應(yīng)用才體現(xiàn)出來,如何發(fā)現(xiàn)此類問題并且不影響用戶體驗是非常重要的。此外,我們有時候還希望新版本的代碼上線以后,只影響到一小部分用戶。而傳統(tǒng)的灰度發(fā)布,因為無法識別業(yè)務(wù)流量,所以即使某個應(yīng)用只有一臺機器出現(xiàn)了問題,也可能會影響到所有的用戶。

如下圖左側(cè)的灰度發(fā)布,App1 的所有機器都有一定概率會路由到出現(xiàn)問題的紅色 App2 機器上。而右側(cè)的隔離環(huán)境發(fā)布中,新版本的代碼會先發(fā)布在全鏈路隔離環(huán)境中,即使發(fā)布中出現(xiàn)問題,也只會影響少量用戶。

優(yōu)勢:

能夠發(fā)現(xiàn)一些復(fù)雜的, 涉及到多應(yīng)用的問題
出現(xiàn)故障時, 只會影響很小一部分用戶
不足:

需要對流量隔離環(huán)境進行獨立監(jiān)控
系統(tǒng)設(shè)計復(fù)雜, 需要中間件和鏈路上的所有應(yīng)用能夠識別業(yè)務(wù)流量
適用場景:

較為核心的生產(chǎn)業(yè)務(wù)場景

二 阿里巴巴發(fā)布最佳實踐

我們將按照發(fā)布的過程來介紹阿里巴巴發(fā)布的最佳實踐。

1 發(fā)布計劃

發(fā)布前要對待發(fā)布功能模塊做充分驗證,同時要思考假如本次發(fā)布引入故障該如何止血。所以在發(fā)布之前寫出本次發(fā)布的計劃清單是非常重要的,一個典型的發(fā)布計劃如下:

本次發(fā)布參與人開發(fā)人測試人代碼 Review 人
發(fā)布內(nèi)容
測試過程
風險描述
線上驗證方案
線上出現(xiàn)問題的止血方案
發(fā)布步驟分 x 批發(fā)布前 x 批發(fā)布后暫停 x 小時

2 不同環(huán)境使用不同的發(fā)布策略

前面介紹的幾種發(fā)布策略都有各自的優(yōu)缺點,要根據(jù)自己的場景特點和需求選擇合適的發(fā)布策略。

一般來說,測試環(huán)境是用來做初步功能測試,所以會頻繁的更新代碼和發(fā)布,如果采用灰度發(fā)布的方式且發(fā)布的批次設(shè)置的比較大,則開發(fā)效率會大打折扣。這個時候單機或多機的單批次停機發(fā)布其實是一個不做的選擇。

對于預(yù)發(fā)環(huán)境,不僅要考慮自己測試的需要,還要考慮上下游其他開發(fā)者的測試需求,所以單批次停機發(fā)布就不再合適,可以設(shè)置兩批發(fā)布。

對于線上環(huán)境,可以先發(fā)布隔離流量環(huán)境,再多批次發(fā)布線上環(huán)境。

3 發(fā)布中關(guān)注監(jiān)控報警

僅靠發(fā)布策略是無法避免故障的發(fā)生的,在發(fā)布中和發(fā)布后仔細的觀察應(yīng)用的監(jiān)控數(shù)據(jù)非常重要。應(yīng)用的核心指標監(jiān)控數(shù)據(jù),比如 QPS、RT、成功率和報錯數(shù),能夠幫助用戶盡可能早的發(fā)現(xiàn)故障。此外,在生產(chǎn)環(huán)境中,如果批次數(shù)量設(shè)置的比較小,每批發(fā)布機器數(shù)量比較少,那么即使某些監(jiān)控指標出現(xiàn)了問題,因為數(shù)據(jù)量比較小,可能會被淹沒在整體的監(jiān)控數(shù)據(jù)中,所以配置已發(fā)布機器的獨立監(jiān)控也是非常重要的。

4 金絲雀發(fā)布和無人值守

阿里內(nèi)部絕大部分應(yīng)用會在多機房/單元部署,可能存在一種場景,同一份代碼和配置在某些機房/單元正常,在其他的的單元/機房下就會出現(xiàn)故障,所以有必要在分批發(fā)布的時候,把所有機房/單元的組合都在第一批發(fā)布時出現(xiàn),這樣問題可以及早暴露。此外研發(fā)人員往往會重點關(guān)注前幾批發(fā)布,如果后面批次才出現(xiàn)問題,研發(fā)人員可能無法快速響應(yīng)。

單元化是為了解決容災(zāi)和擴展性問題,上圖是阿里巴巴的單元化部署架構(gòu)。

此外,應(yīng)用的監(jiān)控項一般都很多,在發(fā)布周期比較長的情況下,不能要求研發(fā)人員時刻專注每一個監(jiān)控項,需要一定的智能化方案幫助研發(fā)找出那些需要重點關(guān)注的監(jiān)控項。

為了解決上面兩個問題,阿里設(shè)計并實現(xiàn)了自己的金絲雀發(fā)布策略。金絲雀發(fā)布從應(yīng)用的每個機房/單元下抽取 10% 的機器放到首批,無人值守智能監(jiān)控系統(tǒng)會對這部分機器設(shè)置獨立的監(jiān)控,對于每個監(jiān)控項,無人值守會對比已發(fā)布和未發(fā)布機器的監(jiān)控指標數(shù)據(jù),同時對比發(fā)布前和發(fā)布后的監(jiān)控數(shù)據(jù),如果發(fā)現(xiàn)異常,會推送給研發(fā)人員做進一步的判斷。

這種金絲雀發(fā)布策略可以幫助研發(fā)盡可能早的發(fā)現(xiàn)問題, 并且減少研發(fā)人員的工作量,提高研發(fā)效率。

5 持續(xù)集成和發(fā)布

合理的選擇發(fā)布策略,按照上面所述的最佳實踐來發(fā)布,發(fā)布的風險可以被控制在很小的范圍內(nèi),甚至比停機發(fā)布的風險還要小。實際上,發(fā)布周期短,每次發(fā)布僅包含少量代碼是一個很好的發(fā)布實踐。因為部署間隔時間長,將會導(dǎo)致每次的部署包含更多的代碼變更,結(jié)果就是出現(xiàn)更多缺陷和宕機的風險。這種情況下,人們?yōu)榱私档桶l(fā)布風險,會傾向于增加更多的評審,事實上這除了大大增加部署時間外,對降低發(fā)布風險的影響微乎其微。這是一個越來越差的增強回路,我們需要通過高頻的持續(xù)部署,來顛覆這個惡性循環(huán)。

三 總結(jié)

敏捷開發(fā)能夠縮短產(chǎn)品走向市場的時間,讓消費者更快地獲得想要的功能,也能讓產(chǎn)品團隊更快地拿到消費者的反饋并據(jù)此對產(chǎn)品做出迭代。為了解決敏捷開發(fā)下頻繁發(fā)布帶來的發(fā)布風險,本文介紹了多種發(fā)布策略,包括各個發(fā)布策略的優(yōu)缺點、適用場景,在不同場景下綜合應(yīng)用這些模式可以在更快速地交付高質(zhì)量的產(chǎn)品。

 

責任編輯:梁菲 來源: 阿里云云棲號
相關(guān)推薦

2011-07-22 10:51:51

2020-12-09 09:52:16

AWSDevOps Guru

2023-02-03 17:37:08

2019-05-09 13:00:34

DevOps

2017-04-11 07:27:07

DevOps開發(fā)運維

2023-03-02 17:44:30

DevOps開發(fā)

2012-05-28 18:09:11

華為云服務(wù)

2010-05-06 12:44:47

Oracle數(shù)據(jù)庫

2009-11-24 09:26:31

pbr策略路由

2012-02-01 10:29:13

2021-07-02 08:00:00

云原生開發(fā)工具

2020-10-27 12:07:17

DevOps單頁應(yīng)用程序開發(fā)

2010-09-10 14:08:50

無線網(wǎng)路安全策略

2009-07-03 10:06:50

JSP JavaBeaJSP Servlet

2010-04-02 09:15:19

GNOME 2.30

2013-06-07 18:38:38

CompuwareDevOps

2022-10-11 15:26:16

網(wǎng)絡(luò)編程鴻蒙

2009-03-25 08:53:04

PhodesAndroid移動OS

2018-02-24 11:59:11

安全策略應(yīng)用程序安全策略

2013-04-11 10:02:14

點贊
收藏

51CTO技術(shù)棧公眾號