Blue/Green Deployment(藍綠部署/藍綠髮布)詳解
-
藍綠部署的目的:減少發佈時的中斷時間、能夠快速撤回發佈。
通俗來說就是在不停老版本服務情況下,部署新版本然後進行測試,確認OK,將流量切到新版本,然後老版本同時也升級到新版本。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. -
藍綠部署的特點:
藍綠部署無需停機,並且風險較小。 -
藍綠部署的原理:
藍綠部署原理很簡單,就是通過冗餘來解決問題。
項目最初沒有任何系統故沒有藍綠之分。第一套系統開發完成,直接上線,這個過程只有一個系統,也沒有藍綠之分。後來,開發了新版本,要用新版本替換線上的舊版本,在線上的系統之外,搭建了一個使用新版本代碼的全新系統。 這時候,一共就有兩套系統(藍綠配置)在運行。
通常生產環境需要兩套系統(藍綠配置),一組是active的生產環境即對外提供服務的老系統配置(綠配置),一組是inactive的配置(藍配置)。兩套系統都是功能完善的,並且正在運行的系統,只是系統版本和對外服務情況不同。 -
藍綠部署的過程
4.1 初始狀態:
部署服務版本A的應用,用戶訪問的時候,所有外部請求的流量都在這個A服務版本即綠色配置(active)上
4.2 部署服務版本B的應用:服務版本B的代碼與服務版本A不同(eg:新功能、Bug修復等)。當你想要升級到服務版本B,在即藍色環境(inactive)中進行操作
4.3將流量從服務版本A切換到服務版本B。
4.4監測服務版本B 是否有故障和異常當確信對外提供服務的藍色系統B工作正常,服務版本B成爲新的active(綠配置),刪除服務版本A上正在使用的資源(例如實例)服務版本A成爲新的inactive(藍配置)用於部署下一個藍色系統。如果運行出現了問題,可以通過負載均衡器指向快速回滾到之前的綠色環境。
-
藍綠部署的優點
5.1 在藍綠部署過程中無需停機,老版本的狀態不受影響,應用始終在線,風險較小。
5.2 可以始終很放心的去部署not active環境,因爲並沒有修改綠色系統老版本的任何內容,如果出錯並不影響生產環境的服務。
5.3 出現問題,可以在非常短的時間內切換回綠色系統,就完成了回滾。只要老版本的資源不被刪除,理論上,可以在任何時間回滾到老版本。
-
藍綠部署的缺點:
6.1 當你切換到藍色環境時,需要妥當處理未完成的業務和新的業務。如果你的數據庫後端無法處理,會是一個比較麻煩的問題;
6.2 可能會出現需要同時處理“微服務架構應用”和“傳統架構應用”的情況,如果在藍綠部署中協調不好這兩者,還是有可能會導致服務停止。
6.3 冗餘產生額外維護、配置的成本,以及服務器本身運行的開銷。
-
藍綠部署的注意事項
7.1 需要提前考慮數據庫與應用部署同步遷移 /回滾的問題。
7.2 藍綠部署需要有基礎設施支持。
7.3 在非隔離基礎架構( VM 、 Docker 等)上執行藍綠部署,藍色環境和綠色環境有被摧毀的風險
-
小結
藍綠部署只是上線策略中的一種,它不是可以應對所有情況的萬能方案。
藍綠部署能夠簡單快捷實施的前提假設是目標系統是非常內聚的,如果目標系統相當複雜,那麼如何切換、兩套系統的數據是否需要以及如何同步等,都需要仔細考慮。