前言
應用程序的更新發布,如何降低對用戶的影響面,人們研究出了幾種發布策略。
更新歷史
- 20200720 - 初稿 - 左程立
- 原文地址 - https://blog.zuolinux.com/2020/07/20/how-to-deployment.html
藍綠部署
流程
准備 A/B 兩個集群,運行相同的程序。
在項目升級時,首先把 A 集群從負載均衡中移除,進行新版本的部署。
B 集群仍提供服務。
A 集群升級完成后加入負載均衡,B 集群從負載均衡中移除。
優點
平滑發布,不會因發布導致服務中斷,策略簡單,回滾速度快,用戶無感知
缺點
消耗資源,硬件成本高,需要兩倍以上服務器資源。
滾動部署
流程
先啟動一台新服務器運行新版本,加入生產環境。
然后停止一台老版本服務器,將其更新為新版本,然后加入生產環境。
依此類推,直到集群中全部服務器升級為新版本。
優點
解決了藍綠發布成本高的問題。如果業務需要 10 台服務器,那么升級中一共有 11 台服務器即可。
缺點
部署周期長,發布策略復雜。
如果此時用戶訪問出現問題,無法快速確定是新版本導致還是舊版本 BUG。即無法進行精確流量控制。
金絲雀部署、也叫灰度部署
流程
在具備精確流量控制的情況下,將部分服務器升級為新版本,然后將指定來源 IP 的小部分流量導向到這部分服務器。
確定這部分用戶沒問題后,將全部服務器升級為新版本。
K8S 中可以使用兩套 Deployment,其中一套 Deployment 運行新版本 Pod,通過 ingress 映射出來后,通過 DNS 將指定來源地區的解析,或者公司內部用戶的解析,導向到該 ingress。
優點
由於我們控制了指定來源的 IP 訪問新版本,所以出現問題后,我們能夠知道受影響用戶訪問的是新版本還是舊版本,從而避免了滾動發布的缺點。
缺點
依然無法避免新版本出現問題后對用戶的影響,但我們已經將其控制在可控范圍之內。
結束語
金絲雀部署,即灰度發布,是相對比較完美的應用程序發布解決方案。
聯系我
微信公眾號:zuolinux_com