如何優雅進行灰度釋出測試?中國工商銀行是這樣實踐的

網路通訊頻道發表於2023-01-31

灰度釋出(Gray Release),又名金絲雀釋出,是從不釋出,逐漸平滑過渡到正式釋出的一種釋出方式。在黑與白之間能夠平滑過渡,得名灰度釋出。灰度釋出使新舊版本短期並存,新版本只向特定使用者釋出,產生的問題隻影響部分使用者,降低新版本上線風險。

如下圖所示,透過引流策略將使用者引流到灰度版本,可以有效控制爆炸半徑,但增加了系統複雜度,需要考慮非灰度版本的相容,服務連續性等,涉及到應用側的灰度部署策略的制定和研發,需要開展針對性的測試,避免灰度釋出引入新缺陷。

專案組開展灰度釋出測試實踐已近2年,取得一定實效,下面透過一個具體例項分享灰度釋出測試經驗。

專案組根據業務重要性、爆炸半徑、部署頻率確定灰度目標,經專家組評審後,制定灰度設計、實施方案。灰度釋出測試主要是驗證灰度設計、灰度實施方案是否滿足灰度目標的要求,以及灰度方案對程式的改動不影響非灰版本功能。

1、開展測試前移工作

測試人員參與到灰度目標制定、灰度設計中,讓灰度相關策略用最小修改成本試出最多缺陷。

(1)分析灰度目標

專案組制定灰度目標,主要包括灰度部署策略,持續交付策略的確定。具體策略制定如下圖,✅ 為選取的策略。

灰度部署策略:主要有物理灰度和邏輯開關兩種方式,物理灰度是物理隔離,邏輯開關透過程式碼增加開關實現。物理灰度安全性高於邏輯開關,但實現難度較大,宜採用物理灰度和邏輯開關結合方式,具體說明如下。

服務節點透過分散式框架自定義路由可實現物理灰度,修改路由控制即可,較簡單,可實現物理灰度。但物理灰度可能無法相容上下游不同的灰度策略,可同時實現邏輯開關。

批次節點、訊息節點、大型機所在框架無法支援物理灰度,需自行修改程式,較複雜,選用邏輯開關方式。

資料庫節點做物理隔離需資料同步,處理很複雜,可能涉及停機。支援物理灰度,需額外研發一箇中間版本,採用邏輯開關方式。由於邏輯開關方式僅有一個資料庫例項,表結構的變動涉及修改原分支功能,無法實現完整意義的灰度。

物理灰度節點部署範圍:僅服務節點部署灰度節點。

物理灰度部署策略:為降低複雜度,採用單版本釋出。要求服務節點舊版本的功能和其他節點新版本相容,如不能相容,則放棄物理灰度,僅使用邏輯開關。具體如下。

物理灰度版本釋出範圍:正式版本、補丁版本均按物理灰度釋出。補丁版本的釋出策略需根據正式版本所處階段調整,具體如下。

物理灰度引流策略:使用多規則組合,白名單,漸進式方式引流。

持續交付自動化程度:根據持續交付工具的能力,儘可能自動化。

(2)分析灰度設計

灰度設計主要是引流策略的設計、服務端設計等。根據具體情況舉例如下。

引流策略的設計:根據渠道和使用者特徵設計引流策略,匹配引流功能,避免灰度引流涉及重要客戶。按分行、支行、櫃員組合進行引流,根據灰度功能靈活配置,可逐步擴大引流範圍。如,需要灰度登陸功能,在櫃員未登陸的情況下,無法獲取對應的支行,引流策略設定為按櫃員引流;需要灰度跨支行調撥功能,調出支行在灰度,調入支行在非灰度,版本不相容,設定為按分行引流。

客戶端設計:根據客戶端型別明確灰度版本推送下載方式。

服務端設計:透過引數配置灰度引流開關,灰度引流規則,支援靈活修改,實時生效。

資料庫設計:根據具體修改評估是否可以物理灰度。

服務連續性設計:採用完全不停機方案,灰度在途功能可以閉環。

2、開展靜態測試工作

主要包括整體灰度策略的靜態驗證和具體功能灰度的靜態測試。

對整體灰度策略:

物理灰度節點與普通節點物理隔離,如,灰度節點採用獨立的容器模板。

服務節點存在對應的灰度節點。服務節點按功能歸類多個節點,非重要功能服務節點,不實現物理灰度。對於命名相似的節點,可採用工具檢查,避免混淆。

對專案功能灰度:

從具體功能評估,是否需要灰度,是否可以灰度,以及具體的灰度策略。由於灰度策略限制,某個功能的修改會影響當期版本灰度策略。具體如下。

新增一套功能,新增表結構,不涉及相關通訊區改動,業務部門暫不開展相關業務,那麼隨正常版本開展灰度策略即可。

修改一套功能,涉及表結構修改,或者上下游通訊區修改,那麼當期版本便無法灰度,其他需求如果需要灰度,考慮增加邏輯開關。

修改一套功能,影響比較小,不涉及表結構修改,或者上下游通訊區修改、訊息推送等功能。不考慮灰度,隨正常版本開展灰度策略即可。

3、開展測試執行工作

測試執行工作主要針對灰度實施開展。灰度實施包括灰度試點、灰轉正等,具體過程舉例如下。

灰度測試執行工作主要是引流測試、灰轉正測試、回退測試、以及非業務功能測試。

引流測試:針對灰度試點工作開展。驗證引流規則,以及分流後的功能驗證。單獨驗證重點保障業務物件,強制引流到非灰節點,不受灰度引流策略影響。全鏈路灰度驗證涉及上下游灰度引流策略一致,避免灰度,非灰均報錯的情況。

對於灰度試點功能,開發灰度引流測試工具,遍歷引流規則並核對結果。灰度試點功能自動化指令碼呼叫引流測試構件,輪詢引流規則,根據灰度、非灰節點使用不同版本的斷言,實現引流測試自動化核對。透過Jenkins例行排程執行自動化指令碼,可快速驗證引流策略和灰度試點功能。

對於存量功能,使用工具將存量功能生產日誌在灰度、非灰分別執行回放,比對兩者結果一致。

灰轉正測試:驗證在不停機轉正場景下,在途業務可以閉環。

回退測試:驗證在途業務可閉環,且支援回切。

非業務功能測試:主要包括高可用測試,效能容量測試。

做好灰度釋出的質量守護是一個長期的過程,需要我們時刻關注灰度釋出的問題,發現改善點,及時提升。以上實踐歡迎同仁參考交流。

來自 “ 高效運維 ”, 原文作者:中國工商銀行軟體開發中心珠海開發四部;原文連結:https://mp.weixin.qq.com/s/dr57nkeDULjIf_wLfeLWyw,如有侵權,請聯絡管理員刪除。

相關文章