藍綠部署(Blue/Green Deployment)
藍綠部署原理上很簡單,就是通過冗余來解決問題。通常生產環境需要兩組配置(藍綠配置),一組是active的生產環境的配置(綠配置),一組是inactive的配置(藍綠配置)。用戶訪問的時候,只會讓用戶訪問active的服務器集群。在綠色環境(active)運行當前生產環境中的應用,也就是舊版本應用version1。當你想要升級到version2 ,在藍色環境(inactive)中進行操作,即部署新版本應用,並進行測試。如果測試沒問題,就可以把負載均衡器/反向代理/路由指向藍色環境了。隨后需要監測新版本應用,也就是version2 是否有故障和異常。如果運行良好,就可以刪除version1 使用的資源。如果運行出現了問題,可以通過負載均衡器指向快速回滾到綠色環境。
藍綠部署中,一共有兩套系統:一套是正在提供服務系統(也就是上面說的舊版),標記為“綠色”;另一套是准備發布的系統,標記為“藍色”。兩套系統都是功能完善的,並且正在運行的系統,只是系統版本和對外服務情況不同。正在對外提供服務的老系統是綠色系統,新部署的系統是藍色系統。
藍色系統不對外提供服務,用來做啥?
用來做發布前測試,測試過程中發現任何問題,可以直接在藍色系統上修改,不干擾用戶正在使用的系統。
藍色系統經過反復的測試、修改、驗證,確定達到上線標准之后,直接將用戶切換到藍色系統, 切換后的一段時間內,依舊是藍綠兩套系統並存,但是用戶訪問的已經是藍色系統。這段時間內觀察藍色系統(新系統)工作狀態,如果出現問題,直接切換回綠色系統。
當確信對外提供服務的藍色系統工作正常,不對外提供服務的綠色系統已經不再需要的時候,藍色系統正式成為對外提供服務系統,成為新的綠色系統。原先的綠色系統可以銷毀,將資源釋放出來,用於[部署下一個藍色系統。
藍綠部署的優點:
藍綠部署的目的是減少發布時的中斷時間、能夠快速撤回發布。
藍綠部署的不足:
切換是全量的,如果 V2 版本有問題,則對用戶體驗有直接影響。 需要兩倍機器資源。
藍綠發布注意事項
藍綠部署只是[上線策略中的一種,它不是可以應對所有情況的萬能方案。藍綠部署能夠簡單快捷實施的前提假設是目標系統是非常內聚的,如果目標系統相當復雜,那么如何切換、兩套系統的數據是否需要以及如何同步等,都需要仔細考慮。
當你切換到藍色環境時,需要妥當處理未完成的業務和新的業務。如果你的數據庫后端無法處理,會是一個比較麻煩的問題;
- 可能會出現需要同時處理“微服務架構應用”和“傳統架構應用”的情況,如果在藍綠[部署中協調不好這兩者,還是有可能會導致服務停止。
- 需要提前考慮數據庫與應用部署同步遷移 /回滾的問題。
- 藍綠部署需要有基礎設施支持。
- 在非隔離基礎架構( VM 、 Docker 等)上執行藍綠[部署,藍色環境和綠色環境有被摧毀的風險。
A/B 測試(A/B Testing)
A/B 測試跟藍綠部署完全是兩碼事。A/B 測試是用來測試應用功能表現的方法,例如可用性、受歡迎程度、可見性等等。 藍綠部署的目的是安全穩定地發布新版本應用,並在必要時回滾。
A/B 測試與藍綠部署的區別在於, A/B 測試目的在於通過科學的實驗設計、采樣樣本代表性、流量分割與小流量測試等方式來獲得具有代表性的實驗結論,並確信該結論在推廣到全部流量可信。
A/B 測試和藍綠部署可以同時使用。
灰度發布
灰度發布, 也叫金絲雀發布。是指在黑與白之間,能夠平滑過渡的一種發布方式。AB test就是一種灰度發布方式,讓一部分用戶繼續用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來。灰度發布可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度,而我們平常所說的金絲雀[部署也就是灰度發布的一種方式。
具體到服務器上, 實際操作中還可以做更多控制,譬如說,給最初更新的10台服務器設置較低的權重、控制發送給這10台服務器的請求數,然后逐漸提高權重、增加請求數。一種平滑過渡的思路, 這個控制叫做“流量切分”。
17世紀,英國礦井工人發現,金絲雀對瓦斯這種氣體十分敏感。空氣中哪怕有極其微量的瓦斯,金絲雀也會停止歌唱;而當瓦斯含量超過一定限度時,雖然魯鈍的人類毫無察覺,金絲雀卻早已毒發身亡。當時在采礦設備相對簡陋的條件下,工人們每次下井都會帶上一只金絲雀作為“瓦斯檢測指標”,以便在危險狀況下緊急撤離。
過程:
- 准備好部署各個階段的工件,包括:構建工件,測試腳本,配置文件和部署清單文件。
- 將“金絲雀”服務器部署進服務器中, 測試。
- 從負載均衡列表中移除掉“金絲雀”服務器。
- 升級“金絲雀”應用(排掉原有流量並進行[部署)。
- 對應用進行自動化測試。
- 將“金絲雀”服務器重新添加到負載均衡列表中(連通性和健康檢查)。
- 如果“金絲雀”在線使用測試成功,升級剩余的其他服務器。(否則就回滾)
參考文章:
https://cloud.tencent.com/developer/article/1910916