譯者 | 陳峻
審校 | 孫淑娟
在構(gòu)建企業(yè)級(jí)應(yīng)用時(shí),我們往往希望能夠給客戶帶來(lái)無(wú)缺陷的使用體驗(yàn)。不過(guò),我們無(wú)法保證每次部署新的代碼,都不會(huì)出現(xiàn)bug。為此,軟件項(xiàng)目團(tuán)隊(duì)需要通過(guò)精心設(shè)置部署過(guò)程,實(shí)現(xiàn)在新的應(yīng)用版本影響用戶之前,能夠從更高的維度識(shí)別出bug。
在眾多部署方法中,金絲雀(Canary)部署能夠通過(guò)實(shí)現(xiàn)無(wú)縫、無(wú)缺陷的應(yīng)用發(fā)布,來(lái)確保用戶的完美體驗(yàn)。下面,我將向您介紹有關(guān)金絲雀部署的基本概念、不同的階段、可以帶來(lái)的好處,以及它們與AWS、ECS(Elastic Compute Service)上的藍(lán)/綠部署的不同之處。
什么是金絲雀部署
從概念上說(shuō),金絲雀部署是通過(guò)在允許每個(gè)用戶能夠訪問(wèn)統(tǒng)一的軟件版本之前,將更新的版本緩慢地分發(fā)給一小部分用戶,從而降低在生產(chǎn)環(huán)境中直接引入軟件更新的風(fēng)險(xiǎn)。
簡(jiǎn)單而言,這是一種分階段式的發(fā)布實(shí)踐。其基本思想是:先向一小部分用戶推送軟件的更新,以便他們可以對(duì)更新進(jìn)行測(cè)試,并提供反饋,直到他們能夠順利地接受了新的版本,最終再將該更新發(fā)布給其他的用戶。
在典型的金絲雀部署中,被引導(dǎo)至新版本的用戶流量,是分階段遞增的。而且,每個(gè)階段都需要完成效果驗(yàn)證之后,才能進(jìn)入下一個(gè)階段。

什么時(shí)候可以使用金絲雀部署策略
- 在您對(duì)平臺(tái)的穩(wěn)定性、以及發(fā)布軟件的某個(gè)新版本可能帶來(lái)的影響,缺乏信心時(shí);
- 當(dāng)您希望由用戶來(lái)測(cè)試應(yīng)用的新版本、以及它與平臺(tái)的集成狀況時(shí);
- 當(dāng)您希望將任何錯(cuò)誤或不良的部署,控制在相對(duì)有限的范圍內(nèi),并且可以及時(shí)修復(fù)可能給用戶造成負(fù)面影響時(shí)。
金絲雀部署都將是您最好的選擇。
金絲雀部署的各個(gè)階段
如前文所述,一個(gè)典型的金絲雀部署會(huì)以分階段遞增的方式,不斷通過(guò)部分用戶的測(cè)試與反饋,來(lái)促進(jìn)全面發(fā)布。通常,金絲雀部署包含了如下三個(gè)階段:
1.計(jì)劃與構(gòu)建
該階段涉及到構(gòu)建一個(gè)部署了最新軟件版本的金絲雀基礎(chǔ)設(shè)施。其中,一部分的用戶流量會(huì)被發(fā)送到該金絲雀實(shí)例上,而大多數(shù)用戶仍然會(huì)繼續(xù)使用生產(chǎn)環(huán)境中的基線實(shí)例。
2.分析
針對(duì)被轉(zhuǎn)移到金絲雀實(shí)例中的用戶流量,項(xiàng)目團(tuán)隊(duì)會(huì)收集各種指標(biāo)數(shù)據(jù)、日志、來(lái)自各種網(wǎng)絡(luò)流量監(jiān)控器的信息、以及來(lái)自合成事務(wù)(synthetic transaction)監(jiān)控器的結(jié)果,以識(shí)別和判定新的金絲雀實(shí)例是否能夠正常工作。在實(shí)際操作中,軟件項(xiàng)目團(tuán)隊(duì)會(huì)分析各種收集到的數(shù)據(jù),并將結(jié)果與基線版本進(jìn)行比較。
3.部署
在金絲雀分析完成后,團(tuán)隊(duì)將決定是繼續(xù)發(fā)布該版本、并推出給其余用戶呢,還是回滾到以前的基線狀態(tài)、以解決發(fā)現(xiàn)的問(wèn)題。

金絲雀部署的好處
作為一種有效且有益的發(fā)布策略,金絲雀部署可以給我們帶來(lái)如下好處:
- 對(duì)功能性部署的精細(xì)控制
執(zhí)行較小且定期的功能性部署,能夠降低由于錯(cuò)誤而對(duì)整個(gè)工作流造成中斷的風(fēng)險(xiǎn)。也就是說(shuō),如果您的團(tuán)隊(duì)能夠及時(shí)識(shí)別到金絲雀部署中的錯(cuò)誤的話,那么只有少數(shù)能夠接觸到新版本的用戶會(huì)受到影響,并且這通常是團(tuán)隊(duì)可以輕松解決的一個(gè)小問(wèn)題。
- 真實(shí)場(chǎng)景測(cè)試
作為一種折中策略,金絲雀部署引入了小規(guī)模的真實(shí)場(chǎng)景測(cè)試,可有效地避免將全新的應(yīng)用直接推向生產(chǎn)環(huán)境,讓全體用戶都被迫地接受風(fēng)險(xiǎn)。
- 零生產(chǎn)環(huán)境的宕機(jī)時(shí)間和更快的回滾
一旦新發(fā)布的軟件版本,在小部分用戶的試用過(guò)程中出現(xiàn)問(wèn)題,項(xiàng)目團(tuán)隊(duì)就可以迅速回滾,然后將這部分流量重新路由回基線。同時(shí),他們能夠?qū)㈠e(cuò)誤的版本迅速下線,以便DevOps團(tuán)隊(duì)確定根本原因,解決問(wèn)題,按需引入下一輪金絲雀部署。
- 讓小型基礎(chǔ)設(shè)施成本更低
由于金絲雀部署只是在一小部分用戶上運(yùn)行,因此DevOps團(tuán)隊(duì)只需要為此準(zhǔn)備一個(gè)小的基礎(chǔ)設(shè)施,從而降低了開發(fā)過(guò)程、乃至整個(gè)項(xiàng)目的成本。
- 靈活地探索新功能
由于金絲雀的實(shí)例首先僅在少量用戶流量上進(jìn)行測(cè)試,因此它對(duì)于整個(gè)組織的用戶體驗(yàn)和基礎(chǔ)設(shè)施的影響可謂最小。也正因?yàn)槿绱?,開發(fā)人員可以靈活地構(gòu)建和試驗(yàn)新的特性,而不必?fù)?dān)心對(duì)用戶體驗(yàn)造成任何直接的影響或結(jié)果。
什么是藍(lán)/綠部署?
藍(lán)/綠部署也是一種將新的代碼發(fā)布到生產(chǎn)環(huán)境中的部署技術(shù)。該策略的目的是簡(jiǎn)化更新的回滾,減少軟件的宕機(jī)時(shí)間,避免應(yīng)用程序的服務(wù)中斷,進(jìn)而滿足所有關(guān)鍵性服務(wù)的運(yùn)行時(shí)間要求。
藍(lán)/綠部署使用兩個(gè)完全相同的生產(chǎn)環(huán)境,其中的一個(gè)會(huì)主動(dòng)為用戶提供服務(wù),另一個(gè)環(huán)境則被設(shè)置為空閑。軟件的更新版本會(huì)被直接推送到主生產(chǎn)環(huán)境中,并被監(jiān)視是否有bug的產(chǎn)生。而空閑的環(huán)境只是作為一個(gè)備份,僅在錯(cuò)誤發(fā)生時(shí),將用戶流量路由到那里。
金絲雀與藍(lán)/綠部署的比較
無(wú)論是金絲雀部署、還是藍(lán)/綠部署策略都需要在執(zhí)行部署之前的計(jì)劃階段,對(duì)業(yè)務(wù)應(yīng)用和生產(chǎn)環(huán)境的體系結(jié)構(gòu)進(jìn)行各種預(yù)先的規(guī)劃和考慮。其中,藍(lán)/綠部署為IT團(tuán)隊(duì)提供了一次性將待推出的新版本,推送到生產(chǎn)環(huán)境中,并予以測(cè)試的機(jī)會(huì)。它方便了IT團(tuán)隊(duì)將所有用戶統(tǒng)一地切換到新的版本上。而金絲雀部署則是分階段的發(fā)布方式。它對(duì)于需要在每個(gè)新版本中更新應(yīng)用的需求,十分友好。
AWS或ECS上的藍(lán)綠色部署,往往需要大量的預(yù)算,來(lái)滿足大型基礎(chǔ)設(shè)施的需求,因?yàn)镮T團(tuán)隊(duì)通常需要維護(hù)兩套完全相同的托管環(huán)境。正是因?yàn)檫@個(gè)原因,那些資源有限、或以應(yīng)用模塊化和配置驅(qū)動(dòng)的企業(yè),更趨向于選擇金絲雀部署。
譯者介紹
陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn)。
原文標(biāo)題:??A Detailed Guide to Canary Deployment??,作者:Ruchita Varma




























