淺談灰度發佈 什麼是灰度發佈 什麼是灰度區 灰度發佈關鍵過程

什麼是灰度發佈

所謂灰度發佈就是將軟件新功能版本先發布到灰度區進行可控範圍的驗證,如果驗證結果良好,再進行正式發佈,否則回滾灰度區取消發佈的一種可靠、可持續的軟件發佈方法。

灰度發佈的核心思想是在不影響軟件系統當前版本可用的情況下,對新版本功能進行驗證後發佈。

什麼是灰度區

所謂灰度區,就是一個在生產環境創建出來的和生產環境版本相同的用於部署待驗證新版本的環境。

對於前端客戶端程序,推送並安裝了待驗證新版本客戶端程序的客戶羣構成灰度區。

灰度發佈關鍵過程

創建灰度區——>流量控制——>灰度區驗證——>正式發佈/回滾

如何創建灰度區

灰度區用來對新版本的部署及功能進行驗證,灰度發佈關鍵是需要將新版本部署到生產環境,經過驗證後進行正式發佈。那麼在正式發佈前,如何進行新版本的部署和驗證?這其實是灰度區的創建的問題,那麼如何創建灰度區呢?

基於生產環境子集創建

典型的做法就是先將生產環境部分正在運行的集羣節點退役,然後部署新版本,從而創建灰度區。在開始驗證前禁止生產流量路由到灰度區。

可能的集羣退役節點的選擇方法有:

1)如果只有一個集羣,那麼可以選擇集羣裏的小部分應用服務節點(如金絲雀發佈選擇金絲雀節點一樣)。

2)如果有多個集羣(如跨IDC多活系統),可以選擇其中一個集羣退役。

構建一套冗餘生產集羣

在同一個生產環境中,部署一套完全冗餘的集羣節點,用於部署新版本構建灰度區(類似藍綠髮布)。取決於冗餘集羣供給方法,從物理機、虛擬機到容器,其成本逐漸降低、靈活性逐漸提高。

流量控制

灰度發佈主要的驗證方式是導入真實流量,那麼如何將真實流量可控地引流到創建好的灰度區呢?

取決於採用的路由/負載均衡器(Router/Load Balancer)的類型不同,可以採用的引流方法不同:

基於域名路由(DNS)

使用灰度專用域名,將灰度域名配置指向灰度區。這種域名引流的方法要求使用灰度域名訪問,增加了域名資源,對外部用戶不一定適用。

基於HTTP請求路由

可能的添加灰度信息到HTTP請求的方式有:

1)使用不同的URL Path, 如hello.com.cn/canary/.....,這種方法的缺點是佔用了URL path資源。

2)在HTTP Headers或者URL Querystring中增加灰度字段存儲灰度信息。

3)基於原始HTTP請求的信息結合一定的路由策略進行灰度引流。如基於cookie裏的用戶信息,可實現如基於用戶白名單、用戶區域,或其他用戶屬性方式的引流策略。

根據上述方法添加的灰度信息,同時在負責七層路由的負載均衡器上基於灰度信息配置響應的引流策略實現引流。

灰度驗證

一般的灰度需要進行:環境適應性驗證、功能驗證、性能驗證及用戶驗證。

環境適應性驗證

部署的程序能否正常啓動,運行狀態是否穩定;對基礎架構資源(CPU,內存,IO,網絡等)的使用是否正常;虛擬運行環境(如JVM等)運行是否正常等。

通過基礎架構資源指標監控工具如promethues等對響應的指標進行監控

通過集成APM工具如CAT,Zipkin,Pinpoint,Skywalking等進行應用程序狀態進行監控驗證。

功能驗證

通過冒煙測試驗證程序基本功能;對新增功能和缺陷修復進行UAT;通過導入真實流量,對程序功能進行驗證。

性能測試

對應用/服務公開接口的RT,TPS進行監控驗證。

用戶驗證

導入真實流量,進行用戶行爲數據收集,對用戶行爲進行分析;對真實用戶流量訪問產生的業務指標進行監控等;輿論監控等。

正式發佈/回滾

當驗證結束,需要正式發佈,正式發佈的方式取決於灰度區是如何創建的。

如果是金絲雀發佈的部署方式,首先,對灰度區恢復正式生產環境流量策略,然後滾動無損更新老版本節點。

如果是藍綠冗餘方式構建灰度區,修改路由配置直接將全量生產流量路由到灰度區,將灰度區轉爲處理生產流量的生產環境集羣。

當灰度驗證後決定取消發佈,灰度區需要回滾。

金絲雀式部署方式需要對灰度區節點回滾,並恢復正式流量路由策略。

如果是藍綠冗餘方式構建灰度區,僅需要關閉灰度區生產流量引流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章