如何優雅進行灰度釋出測試?中國工商銀行是這樣實踐的
灰度釋出(Gray Release),又名金絲雀釋出,是從不釋出,逐漸平滑過渡到正式釋出的一種釋出方式。在黑與白之間能夠平滑過渡,得名灰度釋出。灰度釋出使新舊版本短期並存,新版本只向特定使用者釋出,產生的問題隻影響部分使用者,降低新版本上線風險。
如下圖所示,透過引流策略將使用者引流到灰度版本,可以有效控制爆炸半徑,但增加了系統複雜度,需要考慮非灰度版本的相容,服務連續性等,涉及到應用側的灰度部署策略的制定和研發,需要開展針對性的測試,避免灰度釋出引入新缺陷。
專案組開展灰度釋出測試實踐已近2年,取得一定實效,下面透過一個具體例項分享灰度釋出測試經驗。
專案組根據業務重要性、爆炸半徑、部署頻率確定灰度目標,經專家組評審後,制定灰度設計、實施方案。灰度釋出測試主要是驗證灰度設計、灰度實施方案是否滿足灰度目標的要求,以及灰度方案對程式的改動不影響非灰版本功能。
1、開展測試前移工作
測試人員參與到灰度目標制定、灰度設計中,讓灰度相關策略用最小修改成本試出最多缺陷。
(1)分析灰度目標
專案組制定灰度目標,主要包括灰度部署策略,持續交付策略的確定。具體策略制定如下圖,✅ 為選取的策略。
灰度部署策略:主要有物理灰度和邏輯開關兩種方式,物理灰度是物理隔離,邏輯開關透過程式碼增加開關實現。物理灰度安全性高於邏輯開關,但實現難度較大,宜採用物理灰度和邏輯開關結合方式,具體說明如下。
服務節點透過分散式框架自定義路由可實現物理灰度,修改路由控制即可,較簡單,可實現物理灰度。但物理灰度可能無法相容上下游不同的灰度策略,可同時實現邏輯開關。
批次節點、訊息節點、大型機所在框架無法支援物理灰度,需自行修改程式,較複雜,選用邏輯開關方式。
資料庫節點做物理隔離需資料同步,處理很複雜,可能涉及停機。支援物理灰度,需額外研發一箇中間版本,採用邏輯開關方式。由於邏輯開關方式僅有一個資料庫例項,表結構的變動涉及修改原分支功能,無法實現完整意義的灰度。
物理灰度節點部署範圍:僅服務節點部署灰度節點。
物理灰度部署策略:為降低複雜度,採用單版本釋出。要求服務節點舊版本的功能和其他節點新版本相容,如不能相容,則放棄物理灰度,僅使用邏輯開關。具體如下。
物理灰度版本釋出範圍:正式版本、補丁版本均按物理灰度釋出。補丁版本的釋出策略需根據正式版本所處階段調整,具體如下。
物理灰度引流策略:使用多規則組合,白名單,漸進式方式引流。
持續交付自動化程度:根據持續交付工具的能力,儘可能自動化。
(2)分析灰度設計
灰度設計主要是引流策略的設計、服務端設計等。根據具體情況舉例如下。
引流策略的設計:根據渠道和使用者特徵設計引流策略,匹配引流功能,避免灰度引流涉及重要客戶。按分行、支行、櫃員組合進行引流,根據灰度功能靈活配置,可逐步擴大引流範圍。如,需要灰度登陸功能,在櫃員未登陸的情況下,無法獲取對應的支行,引流策略設定為按櫃員引流;需要灰度跨支行調撥功能,調出支行在灰度,調入支行在非灰度,版本不相容,設定為按分行引流。
客戶端設計:根據客戶端型別明確灰度版本推送下載方式。
服務端設計:透過引數配置灰度引流開關,灰度引流規則,支援靈活修改,實時生效。
資料庫設計:根據具體修改評估是否可以物理灰度。
服務連續性設計:採用完全不停機方案,灰度在途功能可以閉環。
2、開展靜態測試工作
主要包括整體灰度策略的靜態驗證和具體功能灰度的靜態測試。
對整體灰度策略:
物理灰度節點與普通節點物理隔離,如,灰度節點採用獨立的容器模板。
服務節點存在對應的灰度節點。服務節點按功能歸類多個節點,非重要功能服務節點,不實現物理灰度。對於命名相似的節點,可採用工具檢查,避免混淆。
對專案功能灰度:
從具體功能評估,是否需要灰度,是否可以灰度,以及具體的灰度策略。由於灰度策略限制,某個功能的修改會影響當期版本灰度策略。具體如下。
新增一套功能,新增表結構,不涉及相關通訊區改動,業務部門暫不開展相關業務,那麼隨正常版本開展灰度策略即可。
修改一套功能,涉及表結構修改,或者上下游通訊區修改,那麼當期版本便無法灰度,其他需求如果需要灰度,考慮增加邏輯開關。
修改一套功能,影響比較小,不涉及表結構修改,或者上下游通訊區修改、訊息推送等功能。不考慮灰度,隨正常版本開展灰度策略即可。
3、開展測試執行工作
測試執行工作主要針對灰度實施開展。灰度實施包括灰度試點、灰轉正等,具體過程舉例如下。
灰度測試執行工作主要是引流測試、灰轉正測試、回退測試、以及非業務功能測試。
引流測試:針對灰度試點工作開展。驗證引流規則,以及分流後的功能驗證。單獨驗證重點保障業務物件,強制引流到非灰節點,不受灰度引流策略影響。全鏈路灰度驗證涉及上下游灰度引流策略一致,避免灰度,非灰均報錯的情況。
對於灰度試點功能,開發灰度引流測試工具,遍歷引流規則並核對結果。灰度試點功能自動化指令碼呼叫引流測試構件,輪詢引流規則,根據灰度、非灰節點使用不同版本的斷言,實現引流測試自動化核對。透過Jenkins例行排程執行自動化指令碼,可快速驗證引流策略和灰度試點功能。
對於存量功能,使用工具將存量功能生產日誌在灰度、非灰分別執行回放,比對兩者結果一致。
灰轉正測試:驗證在不停機轉正場景下,在途業務可以閉環。
回退測試:驗證在途業務可閉環,且支援回切。
非業務功能測試:主要包括高可用測試,效能容量測試。
做好灰度釋出的質量守護是一個長期的過程,需要我們時刻關注灰度釋出的問題,發現改善點,及時提升。以上實踐歡迎同仁參考交流。
來自 “ 高效運維 ”, 原文作者:中國工商銀行軟體開發中心珠海開發四部;原文連結:https://mp.weixin.qq.com/s/dr57nkeDULjIf_wLfeLWyw,如有侵權,請聯絡管理員刪除。
相關文章
- Service Mesh 在中國工商銀行的探索與實踐
- EMQX 在 Kubernetes 中如何進行優雅升級MQ
- Springboot整合JUnit5優雅進行單元測試Spring Boot
- 工商銀行打造線上診斷平臺的探索與實踐
- 如何優雅的在Golang中進行錯誤處理Golang
- 如何優雅的對UITableView進行解耦UIView解耦
- 中國銀行DevOps標準化實踐dev
- 灰度釋出的一種技術實踐
- 軟體測試案例實踐:銀行如何做大規模自動化測試?
- 什麼是銀行資料治理?如何進行有效的銀行領域的實際應用?
- 中國工商銀行利用區塊鏈技術實現更快的資產交易區塊鏈
- SpringBoot如何優雅的進行引數校驗Spring Boot
- Istio最佳實踐:在K8s上透過Istio服務網格進行灰度釋出K8S
- 如何實現灰度釋出輕量化?
- 中國銀行雲原生技術探索與實踐
- SpringBoot介面 - 如何優雅的對引數進行校驗?Spring Boot
- 如何優雅的寫單元測試?
- 使用 Guzzle 中介軟體進行優雅的請求重試
- 基於 Istio 的灰度釋出架構方案實踐之路架構
- 分散式全鏈路灰度釋出的探索與實踐分散式
- 效能測試進階實踐篇:10分鐘教你使用JMeter進行websocket測試!JMeterWeb
- charles 如何進行介面測試?
- 如何實現優雅的重試?
- 如何用istio實現應用的灰度釋出
- Markdown 利用HTML進行優雅排版HTML
- 一鍵實現自動化部署(灰度釋出)實踐
- 網商銀行×SOFAStack:首家雲上銀行的微服務架構實踐與演進AST微服務架構
- Golang 專案中如何對 API 進行測試?GolangAPI
- 中國工商銀行遭勒索軟體攻擊,金融服務系統中斷
- 如何優雅的在 Kubernetes Pod 內進行網路抓包
- 車載測試:如何用CANape進行ADAS實車功能測試?
- 在Linux中,如何進行系統效能的峰值測試?Linux
- 在Linux中,如何進行網路效能的峰值測試?Linux
- 如何對Spring MVC中的Controller進行單元測試SpringMVCController
- nginx 實現實用的灰度釋出Nginx
- 如何優雅的使用執行緒池執行緒
- 中國工商銀行推進研發管理協作建設,高效賦能數字化轉型
- SpringCloud 應用在 Kubernetes 上的最佳實踐 — 線上釋出(優雅上下線)SpringGCCloud