譯者 | 陳峻
審校 | 孫淑娟
在構建企業(yè)級應用時,我們往往希望能夠給客戶帶來無缺陷的使用體驗。不過,我們無法保證每次部署新的代碼,都不會出現(xiàn)bug。為此,軟件項目團隊需要通過精心設置部署過程,實現(xiàn)在新的應用版本影響用戶之前,能夠從更高的維度識別出bug。
在眾多部署方法中,金絲雀(Canary)部署能夠通過實現(xiàn)無縫、無缺陷的應用發(fā)布,來確保用戶的完美體驗。下面,我將向您介紹有關金絲雀部署的基本概念、不同的階段、可以帶來的好處,以及它們與AWS、ECS(Elastic Compute Service)上的藍/綠部署的不同之處。
什么是金絲雀部署
從概念上說,金絲雀部署是通過在允許每個用戶能夠訪問統(tǒng)一的軟件版本之前,將更新的版本緩慢地分發(fā)給一小部分用戶,從而降低在生產環(huán)境中直接引入軟件更新的風險。
簡單而言,這是一種分階段式的發(fā)布實踐。其基本思想是:先向一小部分用戶推送軟件的更新,以便他們可以對更新進行測試,并提供反饋,直到他們能夠順利地接受了新的版本,最終再將該更新發(fā)布給其他的用戶。
在典型的金絲雀部署中,被引導至新版本的用戶流量,是分階段遞增的。而且,每個階段都需要完成效果驗證之后,才能進入下一個階段。
什么時候可以使用金絲雀部署策略
- 在您對平臺的穩(wěn)定性、以及發(fā)布軟件的某個新版本可能帶來的影響,缺乏信心時;
- 當您希望由用戶來測試應用的新版本、以及它與平臺的集成狀況時;
- 當您希望將任何錯誤或不良的部署,控制在相對有限的范圍內,并且可以及時修復可能給用戶造成負面影響時。
金絲雀部署都將是您最好的選擇。
金絲雀部署的各個階段
如前文所述,一個典型的金絲雀部署會以分階段遞增的方式,不斷通過部分用戶的測試與反饋,來促進全面發(fā)布。通常,金絲雀部署包含了如下三個階段:
1.計劃與構建
該階段涉及到構建一個部署了最新軟件版本的金絲雀基礎設施。其中,一部分的用戶流量會被發(fā)送到該金絲雀實例上,而大多數用戶仍然會繼續(xù)使用生產環(huán)境中的基線實例。
2.分析
針對被轉移到金絲雀實例中的用戶流量,項目團隊會收集各種指標數據、日志、來自各種網絡流量監(jiān)控器的信息、以及來自合成事務(synthetic transaction)監(jiān)控器的結果,以識別和判定新的金絲雀實例是否能夠正常工作。在實際操作中,軟件項目團隊會分析各種收集到的數據,并將結果與基線版本進行比較。
3.部署
在金絲雀分析完成后,團隊將決定是繼續(xù)發(fā)布該版本、并推出給其余用戶呢,還是回滾到以前的基線狀態(tài)、以解決發(fā)現(xiàn)的問題。
金絲雀部署的好處
作為一種有效且有益的發(fā)布策略,金絲雀部署可以給我們帶來如下好處:
- 對功能性部署的精細控制
執(zhí)行較小且定期的功能性部署,能夠降低由于錯誤而對整個工作流造成中斷的風險。也就是說,如果您的團隊能夠及時識別到金絲雀部署中的錯誤的話,那么只有少數能夠接觸到新版本的用戶會受到影響,并且這通常是團隊可以輕松解決的一個小問題。
- 真實場景測試
作為一種折中策略,金絲雀部署引入了小規(guī)模的真實場景測試,可有效地避免將全新的應用直接推向生產環(huán)境,讓全體用戶都被迫地接受風險。
- 零生產環(huán)境的宕機時間和更快的回滾
一旦新發(fā)布的軟件版本,在小部分用戶的試用過程中出現(xiàn)問題,項目團隊就可以迅速回滾,然后將這部分流量重新路由回基線。同時,他們能夠將錯誤的版本迅速下線,以便DevOps團隊確定根本原因,解決問題,按需引入下一輪金絲雀部署。
- 讓小型基礎設施成本更低
由于金絲雀部署只是在一小部分用戶上運行,因此DevOps團隊只需要為此準備一個小的基礎設施,從而降低了開發(fā)過程、乃至整個項目的成本。
- 靈活地探索新功能
由于金絲雀的實例首先僅在少量用戶流量上進行測試,因此它對于整個組織的用戶體驗和基礎設施的影響可謂最小。也正因為如此,開發(fā)人員可以靈活地構建和試驗新的特性,而不必擔心對用戶體驗造成任何直接的影響或結果。
什么是藍/綠部署?
藍/綠部署也是一種將新的代碼發(fā)布到生產環(huán)境中的部署技術。該策略的目的是簡化更新的回滾,減少軟件的宕機時間,避免應用程序的服務中斷,進而滿足所有關鍵性服務的運行時間要求。
藍/綠部署使用兩個完全相同的生產環(huán)境,其中的一個會主動為用戶提供服務,另一個環(huán)境則被設置為空閑。軟件的更新版本會被直接推送到主生產環(huán)境中,并被監(jiān)視是否有bug的產生。而空閑的環(huán)境只是作為一個備份,僅在錯誤發(fā)生時,將用戶流量路由到那里。
金絲雀與藍/綠部署的比較
無論是金絲雀部署、還是藍/綠部署策略都需要在執(zhí)行部署之前的計劃階段,對業(yè)務應用和生產環(huán)境的體系結構進行各種預先的規(guī)劃和考慮。其中,藍/綠部署為IT團隊提供了一次性將待推出的新版本,推送到生產環(huán)境中,并予以測試的機會。它方便了IT團隊將所有用戶統(tǒng)一地切換到新的版本上。而金絲雀部署則是分階段的發(fā)布方式。它對于需要在每個新版本中更新應用的需求,十分友好。
AWS或ECS上的藍綠色部署,往往需要大量的預算,來滿足大型基礎設施的需求,因為IT團隊通常需要維護兩套完全相同的托管環(huán)境。正是因為這個原因,那些資源有限、或以應用模塊化和配置驅動的企業(yè),更趨向于選擇金絲雀部署。
譯者介紹
陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗。
原文標題:??A Detailed Guide to Canary Deployment??,作者:Ruchita Varma