藍(lán)綠部署、紅黑部署闷愤、AB測(cè)試整葡、灰度發(fā)布、金絲雀發(fā)布讥脐、滾動(dòng)發(fā)布的概念與區(qū)別 轉(zhuǎn)

在有關(guān)微服務(wù)遭居、DevOps、Cloud-native旬渠、系統(tǒng)部署等的討論中俱萍,藍(lán)綠部署、A/B 測(cè)試告丢、灰度發(fā)布枪蘑、滾動(dòng)發(fā)布、紅黑部署等概念經(jīng)常被提到,它們有什么區(qū)別呢岳颇?通過搜索相關(guān)資料照捡,做一個(gè)簡(jiǎn)單的辨析,如下:

一赦役、藍(lán)綠部署(Blue/Green Deployment)

過去的 10 年里麻敌,很多公司都在使用藍(lán)綠部署(發(fā)布)來實(shí)現(xiàn)熱部署,這種部署方式具有安全掂摔、可靠的特點(diǎn)术羔。藍(lán)綠部署雖然算不上“ Sliver Bullet”,但確實(shí)很實(shí)用乙漓。

藍(lán)綠部署是最常見的一種0 downtime部署的方式级历,是一種以可預(yù)測(cè)的方式發(fā)布應(yīng)用的技術(shù),目的是減少發(fā)布過程中服務(wù)停止的時(shí)間叭披。藍(lán)綠部署原理上很簡(jiǎn)單寥殖,就是通過冗余來解決問題。通常生產(chǎn)環(huán)境需要兩組配置(藍(lán)綠配置)涩蜘,一組是active的生產(chǎn)環(huán)境的配置(綠配置)嚼贡,一組是inactive的配置(藍(lán)綠配置)。用戶訪問的時(shí)候同诫,只會(huì)讓用戶訪問active的服務(wù)器集群粤策。在綠色環(huán)境(active)運(yùn)行當(dāng)前生產(chǎn)環(huán)境中的應(yīng)用,也就是舊版本應(yīng)用version1误窖。當(dāng)你想要升級(jí)到version2 叮盘,在藍(lán)色環(huán)境(inactive)中進(jìn)行操作,即部署新版本應(yīng)用霹俺,并進(jìn)行測(cè)試柔吼。如果測(cè)試沒問題,就可以把負(fù)載均衡器/反向代理/路由指向藍(lán)色環(huán)境了丙唧。隨后需要監(jiān)測(cè)新版本應(yīng)用愈魏,也就是version2 是否有故障和異常。如果運(yùn)行良好想际,就可以刪除version1 使用的資源培漏。如果運(yùn)行出現(xiàn)了問題,可以通過負(fù)載均衡器指向快速回滾到綠色環(huán)境沼琉。

藍(lán)綠部署的優(yōu)點(diǎn):

這種方式的好處在你可以始終很放心的去部署inactive環(huán)境北苟,如果出錯(cuò)并不影響生產(chǎn)環(huán)境的服務(wù)桩匪,如果切換后出現(xiàn)問題打瘪,也可以在非常短的時(shí)間內(nèi)把再做一次切換,就完成了回滾。而且同時(shí)在線的只有一個(gè)版本闺骚。藍(lán)綠部署無需停機(jī)彩扔,并且風(fēng)險(xiǎn)較小。

(1) 部署版本1的應(yīng)用(一開始的狀態(tài))僻爽,所有外部請(qǐng)求的流量都打到這個(gè)版本上虫碉。

(2) 部署版本2的應(yīng)用,版本2的代碼與版本1不同(新功能胸梆、Bug修復(fù)等)敦捧。

(3) 將流量從版本1切換到版本2。

(4) 如版本2測(cè)試正常碰镜,就刪除版本1正在使用的資源(例如實(shí)例)兢卵,從此正式用版本2。

從過程不難發(fā)現(xiàn)绪颖,在部署的過程中秽荤,應(yīng)用始終在線。并且柠横,新版本上線的過程中窃款,并沒有修改老版本的任何內(nèi)容,在部署期間牍氛,老版本的狀態(tài)不受影響晨继。這樣風(fēng)險(xiǎn)很小,并且糜俗,只要老版本的資源不被刪除踱稍,理論上,可以在任何時(shí)間回滾到老版本悠抹。

藍(lán)綠部署的弱點(diǎn):

使用藍(lán)綠部署需要注意的一些細(xì)節(jié)包括:

1珠月、當(dāng)切換到藍(lán)色環(huán)境時(shí),需要妥當(dāng)處理未完成的業(yè)務(wù)和新的業(yè)務(wù)楔敌。如果數(shù)據(jù)庫后端無法處理啤挎,會(huì)是一個(gè)比較麻煩的問題。

2卵凑、有可能會(huì)出現(xiàn)需要同時(shí)處理“微服務(wù)架構(gòu)應(yīng)用”和“傳統(tǒng)架構(gòu)應(yīng)用”的情況庆聘,如果在藍(lán)綠部署中協(xié)調(diào)不好這兩者,還是有可能導(dǎo)致服務(wù)停止勺卢;

3伙判、需要提前考慮數(shù)據(jù)庫與應(yīng)用部署同步遷移/回滾的問題。

4黑忱、藍(lán)綠部署需要有基礎(chǔ)設(shè)施支持宴抚。

5勒魔、在非隔離基礎(chǔ)架構(gòu)( VM 、 Docker 等)上執(zhí)行藍(lán)綠部署菇曲,藍(lán)色環(huán)境和綠色環(huán)境有被摧毀的風(fēng)險(xiǎn)冠绢。

6、另外常潮,這種方式不好的地方還在于冗余產(chǎn)生的額外維護(hù)弟胀、配置的成本,以及服務(wù)器本身運(yùn)行的開銷喊式。

藍(lán)綠部署適用的場(chǎng)景:

1孵户、不停止老版本,額外搞一套新版本岔留,等測(cè)試發(fā)現(xiàn)新版本OK后延届,刪除老版本。

2贸诚、藍(lán)綠發(fā)布是一種用于升級(jí)與更新的發(fā)布策略方庭,部署的最小維度是容器,而發(fā)布的最小維度是應(yīng)用酱固。

3械念、藍(lán)綠發(fā)布對(duì)于增量升級(jí)有比較好的支持,但是對(duì)于涉及數(shù)據(jù)表結(jié)構(gòu)變更等等不可逆轉(zhuǎn)的升級(jí)运悲,并不完全合適用藍(lán)綠發(fā)布來實(shí)現(xiàn)龄减,需要結(jié)合一些業(yè)務(wù)的邏輯以及數(shù)據(jù)遷移與回滾的策略才可以完全滿足需求。

A/B 測(cè)試(A/B Testing)

A/B 測(cè)試跟藍(lán)綠部署完全是兩碼事班眯。A/B 測(cè)試是用來測(cè)試應(yīng)用功能表現(xiàn)的方法希停,例如可用性、受歡迎程度署隘、可見性等等宠能。 藍(lán)綠部署的目的是安全穩(wěn)定地發(fā)布新版本應(yīng)用,并在必要時(shí)回滾磁餐。

A/B 測(cè)試與藍(lán)綠部署的區(qū)別在于违崇, A/B 測(cè)試目的在于通過科學(xué)的實(shí)驗(yàn)設(shè)計(jì)、采樣樣本代表性诊霹、流量分割與小流量測(cè)試等方式來獲得具有代表性的實(shí)驗(yàn)結(jié)論羞延,并確信該結(jié)論在推廣到全部流量可信。

A/B 測(cè)試和藍(lán)綠部署可以同時(shí)使用脾还。

灰度發(fā)布/金絲雀發(fā)布

灰度發(fā)布是指在黑與白之間伴箩,能夠平滑過渡的一種發(fā)布方式”陕灰度發(fā)布是增量發(fā)布的一種類型嗤谚,灰度發(fā)布是在原有版本可用的情況下砂客,同時(shí)部署一個(gè)新版本應(yīng)用作為“金絲雀”(金絲雀對(duì)瓦斯極敏感,礦井工人攜帶金絲雀呵恢,以便及時(shí)發(fā)發(fā)現(xiàn)危險(xiǎn)),測(cè)試新版本的性能和表現(xiàn)媚创,以保障整體系統(tǒng)穩(wěn)定的情況下渗钉,盡早發(fā)現(xiàn)、調(diào)整問題钞钙。

灰度發(fā)布/金絲雀發(fā)布由以下幾個(gè)步驟組成:

1鳄橘、準(zhǔn)備好部署各個(gè)階段的工件,包括:構(gòu)建工件芒炼,測(cè)試腳本瘫怜,配置文件和部署清單文件。

2本刽、從負(fù)載均衡列表中移除掉“金絲雀”服務(wù)器鲸湃。

3、升級(jí)“金絲雀”應(yīng)用(排掉原有流量并進(jìn)行部署)子寓。

4暗挑、對(duì)應(yīng)用進(jìn)行自動(dòng)化測(cè)試。

5斜友、將“金絲雀”服務(wù)器重新添加到負(fù)載均衡列表中(連通性和健康檢查)炸裆。

6、如果“金絲雀”在線使用測(cè)試成功鲜屏,升級(jí)剩余的其他服務(wù)器烹看。(否則就回滾)

灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)洛史、調(diào)整問題惯殊,以保證其影響度。

灰度發(fā)布/金絲雀部署適用的場(chǎng)景:

1也殖、不停止老版本靠胜,額外搞一套新版本变逃,不同版本應(yīng)用共存雹食。

2恢着、灰度發(fā)布中染乌,常常按照用戶設(shè)置路由權(quán)重慎陵,例如90%的用戶維持使用老版本陋葡,10%的用戶嘗鮮新版本谭企。

3祠墅、經(jīng)常與A/B測(cè)試一起使用冻璃,用于測(cè)試選擇多種方案响谓。AB test就是一種灰度發(fā)布方式损合,讓一部分用戶繼續(xù)用A,一部分用戶開始用B娘纷,如果用戶對(duì)B沒有什么反對(duì)意見嫁审,那么逐步擴(kuò)大范圍,把所有用戶都遷移到B上面來赖晶。

趣聞 :

金絲雀部署(同理還有金絲雀測(cè)試)律适,“金絲雀”的由來:17世紀(jì),英國礦井工人發(fā)現(xiàn)遏插,金絲雀對(duì)瓦斯這種氣體十分敏感捂贿。空氣中哪怕有極其微量的瓦斯胳嘲,金絲雀也會(huì)停止歌唱厂僧;而當(dāng)瓦斯含量超過一定限度時(shí),雖然魯鈍的人類毫無察覺了牛,金絲雀卻早已毒發(fā)身亡颜屠。當(dāng)時(shí)在采礦設(shè)備相對(duì)簡(jiǎn)陋的條件下,工人們每次下井都會(huì)帶上一只金絲雀作為“瓦斯檢測(cè)指標(biāo)”鹰祸,以便在危險(xiǎn)狀況下緊急撤離汽纤。

滾動(dòng)發(fā)布(rolling update)

滾動(dòng)發(fā)布,一般是取出一個(gè)或者多個(gè)服務(wù)器停止服務(wù)福荸,執(zhí)行更新蕴坪,并重新將其投入使用。周而復(fù)始敬锐,直到集群中所有的實(shí)例都更新成新版本背传。這種部署方式相對(duì)于藍(lán)綠部署,更加節(jié)約資源——它不需要運(yùn)行兩個(gè)集群台夺、兩倍的實(shí)例數(shù)径玖。我們可以部分部署,例如每次只取出集群的20%進(jìn)行升級(jí)颤介。

這種方式也有很多缺點(diǎn)梳星,例如:

(1) 沒有一個(gè)確定OK的環(huán)境。使用藍(lán)綠部署滚朵,我們能夠清晰地知道老版本是OK的冤灾,而使用滾動(dòng)發(fā)布,我們無法確定辕近。

(2) 修改了現(xiàn)有的環(huán)境韵吨。

(3) 如果需要回滾,很困難移宅。舉個(gè)例子归粉,在某一次發(fā)布中椿疗,我們需要更新100個(gè)實(shí)例,每次更新10個(gè)實(shí)例糠悼,每次部署需要5分鐘届榄。當(dāng)滾動(dòng)發(fā)布到第80個(gè)實(shí)例時(shí),發(fā)現(xiàn)了問題倔喂,需要回滾铝条。此時(shí),脾氣不好的程序猿很可能想掀桌子滴劲,因?yàn)榛貪L是一個(gè)痛苦,并且漫長(zhǎng)的過程顾复。

(4) 有的時(shí)候班挖,我們還可能對(duì)系統(tǒng)進(jìn)行動(dòng)態(tài)伸縮,如果部署期間芯砸,系統(tǒng)自動(dòng)擴(kuò)容/縮容了萧芙,我們還需判斷到底哪個(gè)節(jié)點(diǎn)使用的是哪個(gè)代碼。盡管有一些自動(dòng)化的運(yùn)維工具假丧,但是依然令人心驚膽戰(zhàn)双揪。

并不是說滾動(dòng)發(fā)布不好,滾動(dòng)發(fā)布也有它非常合適的場(chǎng)景包帚。

紅黑部署(Red-Black Deployment)

這是Netflix采用的部署手段渔期,Netflix的主要基礎(chǔ)設(shè)施是在AWS上,所以它利用AWS的特性渴邦,在部署新的版本時(shí)疯趟,通過AutoScaling Group用包含新版本應(yīng)用的AMI的LaunchConfiguration創(chuàng)建新的服務(wù)器。測(cè)試不通過谋梭,找到問題原因后信峻,直接干掉新生成的服務(wù)器以及Autoscaling Group就可以,測(cè)試通過瓮床,則將ELB指向新的服務(wù)器集群盹舞,然后銷毀掉舊的服務(wù)器集群以及AutoScaling Group。

紅黑部署的好處是服務(wù)始終在線隘庄,同時(shí)采用不可變部署的方式踢步,也不像藍(lán)綠部署一樣得保持冗余的服務(wù)始終在線。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丑掺,一起剝皮案震驚了整個(gè)濱河市贾虽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吼鱼,老刑警劉巖蓬豁,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰咽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡地粪,警方通過查閱死者的電腦和手機(jī)取募,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟆技,“玉大人玩敏,你說我怎么就攤上這事≈世瘢” “怎么了旺聚?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)眶蕉。 經(jīng)常有香客問我砰粹,道長(zhǎng),這世上最難降的妖魔是什么造挽? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任碱璃,我火速辦了婚禮,結(jié)果婚禮上饭入,老公的妹妹穿的比我還像新娘嵌器。我一直安慰自己,他們只是感情好谐丢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布爽航。 她就那樣靜靜地躺著,像睡著了一般乾忱。 火紅的嫁衣襯著肌膚如雪岳掐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天饭耳,我揣著相機(jī)與錄音串述,去河邊找鬼。 笑死寞肖,一個(gè)胖子當(dāng)著我的面吹牛纲酗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播新蟆,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼觅赊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了琼稻?” 一聲冷哼從身側(cè)響起吮螺,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鸠补,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萝风,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年紫岩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了规惰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泉蝌,死狀恐怖歇万,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勋陪,我是刑警寧澤贪磺,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站诅愚,受9級(jí)特大地震影響寒锚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呻粹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一壕曼、第九天 我趴在偏房一處隱蔽的房頂上張望苏研。 院中可真熱鬧等浊,春花似錦、人聲如沸摹蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衅鹿。三九已至撒踪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間大渤,已是汗流浹背制妄。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泵三,地道東北人耕捞。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烫幕,于是被迫代替她去往敵國和親俺抽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容