摘取自 騰訊區塊鏈測試團隊的混沌工程實踐
[初衷]:做虛擬化方面的混沌工程實踐有段時間了,也想看下其它產品混沌工程如何展開的。
一個產品(業務鏈)為什么要進行混沌工程演練
區塊鏈是一種由多方共同維護,使用密碼學保證傳輸和訪問安全,能夠實現數據一致存儲、難以篡改、防止抵賴的記賬技術,也稱為分布式賬本技術。
按照接入范圍,區塊鏈可分為公有鏈、聯盟鏈和私有鏈。
目前國內最普遍使用的是聯合行業或組織內成員搭建合作、共贏的聯盟鏈。區塊鏈服務建立在分布式系統之上,可能遇到的故障非常多,不僅僅是節點故障、各種網絡故障、文件系統故障,甚至內核錯誤都時有發生。如果區塊鏈服務不能很好地處理這些異常,那么服務的穩定性將遭到挑戰,其后果也不堪設想。出于此考慮,騰訊金融科技區塊鏈測試團隊建立了適用于區塊鏈領域的混沌工程實施框架。
[匯總一句話]區域鏈服務是建立在分布式系統之上,服務的穩定性可能存在不可預知的問題,需要混沌工程來解決。
混沌工程穩態假設:業務指標(如何判斷區塊鏈服務是否正常?)
區塊鏈往往是個基于EDA架構的自運轉系統,無請求時,也會有空塊產出,而聯盟鏈通常采用的是BFT類共識算法,該類算法支持3F+1容錯,所以判斷區塊鏈的對外服務是否正常不能單一依據節點進程是否運行來給出,這里給出幾個體現區塊鏈服務是否正常的健康度指標,也就是混沌工程里提到的穩態指標。
1)節點數據一致性
區塊鏈中的數據是經過共識節點交叉驗證后存儲上鏈的,所以正常預期是分布式的節點數據滿足最終一致性,這些數據包括區塊數據、交易數據、業務數據等。所以需要提供數據一致性校驗工具。
2)并發場景下區塊鏈服務的QPS/TPS
在穩定并發場景下,區塊鏈對外服務的QPS、TPS應該保持穩定,如果注入一些網絡延遲、或者CPU高負載等異常,會導致QPS/TPS波動起伏,不再穩定。
3)并發場景下區塊鏈服務的響應時間(RT)
同樣地,在穩定并發場景下,區塊鏈對外服務的響應時間應該保持穩定,波動不大,注入異常后,會引起RT的波動,也會破壞系統穩態。
4)區塊鏈在一段時間內的round切換頻率
共識節點出現異常,導致發起的提案失敗,會引發round值的切換,觸發下一個節點發起共識,所以一個區塊內round值越大,說明系統出現問題的概率越大。
5)區塊鏈在一段時間內不同節點的高度差
區塊鏈是一個自轉系統,在無請求時,高度也會追加,正常情況下,不同節點在共識+同步的雙重影響下,高度不會差距太大,如果出現不同節點高度差有變大的趨勢,也預示著系統的穩態遭到破壞。
[收益的點]不同產品定義各自的業務指標,不同深度的指標,表示該產品對業務服務的精細化(SLA),也表示該產品對其穩定性的決心。數據有多份,是檢查多份間數據的一致性還是檢查容錯忍受范圍內的數據一致性,拜占庭機制下只要大于一半以上的均是可以對外提供服務的。業務服務是并發場景下QPS/TPS,還是單場景下的,一個產品支持1億萬用戶在線,只要少于1億用戶都是問題。一個產品客戶端頁面響應時間在2-5秒,只要影響這個響應時長的都是問題。拿虛擬化產品來說,業務是以支持1千用戶創建虛機成功的指標為標準還是任意用戶創建虛機的本次操作成功為標準。前者可能是某個時間段內,比如5分鐘內1千用戶創建虛機成功的指標,后者偏向于一次虛機創建是否成功。
混沌工程穩態假設(可觀測性指標)
可觀測性,在系統中是非常重要的一環。通常來說可觀測性主要包含 Metrics(指標),Logging(日志)和 Tracing(追蹤)。三者的關系如下圖所示:
[自己一點經驗]這三點都有,對于混沌工程的推進和問題定位收斂,起到事半功倍的作用,進行過混沌工程演練的人一定深有體會。
基于工作流的混沌工程實施框架
整個實施框架分為以下幾部分:
BlockChain:被測區塊鏈網絡區域,搭建好的區塊鏈網絡分為共識域和同步域,每個區塊鏈節點上都會部署相應的ChaosAgent。
Load/Test Script:壓測腳本,用來對被測的區塊鏈網絡施加穩定的基準流量,這些流量用例包括合約執行、交易上鏈、交易查詢等。
ChaosServer:負責接收指令請求,向具體的節點施加具體的異常場景,包括CPU、磁盤、網絡、進程等。
Tools:配套工具集,包括部署、日志收集、數據分析等。
Scheduler:混沌場景調度器,將某個時間點向某個節點施加某個異常,以工作流的形式放入任務隊列中,然后調度器按時取任務,然后向ChaosServer發送命令請求。
我們借助PipeLine搭建了區塊鏈的DevOps研發流水線。流水線將開發自測、構建、覆蓋率、質量紅線、異常測試、混沌實驗、自動化測試、報告收集等流程打通。
通過對區塊鏈實施混沌實驗,并將故障注入、實驗分析、可觀測性告警等流程自動化后,帶來的收益也較為顯著:
1)自動化實施混沌實驗,可減少手工構造異常場景的時間成功。
2)模擬的故障場景豐富,可涵蓋接近真實生產的異常條件。
3)結合系統可觀測性的實現,可以實現分鐘級問題發現和告警能力,并且累計發現Bug數十個,回歸混沌場景數百次。
[感受]不同的評價緯度,也是其對混沌工程的看法。混沌工程的好壞不能以故障注入的時長為標準,某種意義上的還行。混沌演練工具也有發展階段,如果在初期,也存在不穩定的情況,有可能還沒有手工注入的時間短。