灰度发布、金丝雀发布,持续集成
藍綠部署、A/B測試、金絲雀發布,以及灰度發布、流量切分等,經常被混為一談,影響溝通效率。 根本原因是這些名詞經常出現,人們耳熟能詳能夠熟練地談起,對這些術語的理解卻沒有達成一致。
下面是從Blue-green Deployments, A/B Testing, and Canary Releases中整理出來的定義。
1. 藍綠部署
在、藍綠部署的目的是減少發布時的中斷時間、能夠快速撤回發布。
It’s basically a technique for releasing your application in a predictable manner with an goal of reducing any downtime associated with a release. It’s a quick way to prime your app before releasing, and also quickly roll back if you find issues.
藍綠部署中,一共有兩套系統:一套是正在提供服務系統,標記為“綠色”;另一套是準備發布的系統,標記為“藍色”。兩套系統都是功能完善的,并且正在運行的系統,只是系統版本和對外服務情況不同。
最初,沒有任何系統,沒有藍綠之分。
然后,第一套系統開發完成,直接上線,這個過程只有一個系統,也沒有藍綠之分。
后來,開發了新版本,要用新版本替換線上的舊版本,在線上的系統之外,搭建了一個使用新版本代碼的全新系統。 這時候,一共有兩套系統在運行,正在對外提供服務的老系統是綠色系統,新部署的系統是藍色系統。
藍色系統不對外提供服務,用來做啥?
用來做發布前測試,測試過程中發現任何問題,可以直接在藍色系統上修改,不干擾用戶正在使用的系統。(注意,兩套系統沒有耦合的時候才能百分百保證不干擾)
藍色系統經過反復的測試、修改、驗證,確定達到上線標準之后,直接將用戶切換到藍色系統:
切換后的一段時間內,依舊是藍綠兩套系統并存,但是用戶訪問的已經是藍色系統。這段時間內觀察藍色系統(新系統)工作狀態,如果出現問題,直接切換回綠色系統。
當確信對外提供服務的藍色系統工作正常,不對外提供服務的綠色系統已經不再需要的時候,藍色系統正式成為對外提供服務系統,成為新的綠色系統。 原先的綠色系統可以銷毀,將資源釋放出來,用于部署下一個藍色系統。
藍綠部署只是上線策略中的一種,它不是可以應對所有情況的萬能方案。 藍綠部署能夠簡單快捷實施的前提假設是目標系統是非常內聚的,如果目標系統相當復雜,那么如何切換、兩套系統的數據是否需要以及如何同步等,都需要仔細考慮。
BlueGreenDeployment中給出的一張圖特別形象:
2. 金絲雀發布
金絲雀發布(Canary)也是一種發布策略,和國內常說的灰度發布是同一類策略。
藍綠部署是準備兩套系統,在兩套系統之間進行切換,金絲雀策略是只有一套系統,逐漸替換這套系統。
譬如說,目標系統是一組無狀態的Web服務器,但是數量非常多,假設有一萬臺。
這時候,藍綠部署就不能用了,因為你不可能申請一萬臺服務器專門用來部署藍色系統(在藍綠部署的定義中,藍色的系統要能夠承接所有訪問)。
可以想到的一個方法是:
只準備幾臺服務器,在上面部署新版本的系統并測試驗證。測試通過之后,擔心出現意外,還不敢立即更新所有的服務器。 先將線上的一萬臺服務器中的10臺更新為最新的系統,然后觀察驗證。確認沒有異常之后,再將剩余的所有服務器更新。
這個方法就是金絲雀發布。
實際操作中還可以做更多控制,譬如說,給最初更新的10臺服務器設置較低的權重、控制發送給這10臺服務器的請求數,然后逐漸提高權重、增加請求數。
這個控制叫做“流量切分”,既可以用于金絲雀發布,也可以用于后面的A/B測試。
藍綠部署和金絲雀發布是兩種發布策略,都不是萬能的。有時候兩者都可以使用,有時候只能用其中一種。
上面的例子中可以用金絲雀,不能用藍綠,那么什么時候可以用藍綠,不能用金絲雀呢?整個系統只有一臺服務器的時候。
3. 持續集成
是一種軟件開發實踐,即團隊開發成員經常集成它們的工作,通常每個成員每天至少集成一次,也就意味著每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡快地發現集成錯誤。許多團隊發現這個過程可以大大減少集成的問題,讓團隊能夠更快的開發內聚的軟件。
持續集成的優點:
(1)、快速發現錯誤。每完成一點更新,就集成到主干,可以快速發現錯誤,定位錯誤也比較容易。
(2)、防止分支大幅偏離主干。如果不是經常集成,主干又在不斷更新,會導致以后集成的難度變大,甚至難以集成。
總結
以上是生活随笔為你收集整理的灰度发布、金丝雀发布,持续集成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三人两房麻将怎么玩 三人两房麻将玩法攻略
- 下一篇: C语言状态机编程思想