原文:AWS云上混沌工程實踐之對照實驗設計篇 | 亞馬遜AWS官方博客 (amazon.com)
混沌工程實驗:一個持續性迭代的閉環體系
圖3 混沌工程實驗的實踐流程
如圖3所示,完整的混沌工程實驗是一個持續性迭代的閉環體系,從初步的實驗需求和實驗對象出發,通過實驗可行性評估,確定實驗范圍,設計合適的觀測指標、實驗場景和環境,選擇合適的實驗工具和平臺框架;建立實驗計劃,和實驗對象的干系人充分溝通,進而聯合執行實驗過程,并搜集預先設計好的實驗指標;待實驗完成后,清理和恢復實驗環境,對實驗結果進行分析,追蹤根源并解決問題,并將以上實驗場景自動化,并入流水線,定期執行;之后,便可開始增加新的實驗范圍,持續迭代和有序改進。
下面我們會深入討論有關混沌工程實驗的準備事項:
- 實驗可行性評估
- 觀測指標設計與對照
- 實驗場景和環境的設計
- 實驗工具和平臺框架選型(限于篇幅,未完待續)
實驗可行性評估
可行性評估篇提供了這樣一個混沌工程實驗的可行性評估模型,從多個維度對實驗技術的成熟度做了定性分析。此處的實驗可行性評估,依照這個可行性評估模型,會針對具體的實驗需求和實驗對象進行細致評估。常見的一個形式是對照“可行性評估問題表”,對實驗對象的干系人進行訪談。可行性評估問題表的內容會包含以下幾個方面:
- 架構抵御故障的能力:通過對實驗對象的架構高可用性的分析和評估,找出潛在的系統單點風險,確定合理的實驗范圍。
- 實驗指標設計:評估目前實驗對象判定業務正常運行所需的業務指標、應用健康狀況指標和其他系統指標。
- 實驗環境選擇:選擇實驗對象可以應用的實驗環境:開發、測試、預生產、生產。
- 實驗工具使用:評估目前實驗對象對實驗工具的熟悉程度。
- 故障注入場景及爆炸半徑:討論和選擇可行的故障注入場景,并評估每個場景的爆炸半徑。
- 實驗自動化能力:衡量目前實驗對象的平臺自動化實施能力。
- 環境恢復能力:根據選定的故障注入場景,評估實驗對象對環境的清理和恢復能力。
- 實驗結果整理:根據實驗需求,討論確定實驗結果和解讀分析報告的內容項。
觀測指標設計與對照
觀測指標設計
觀測指標的設計是整個混沌工程實驗成功與否的關鍵之一。最新的調研報告“Chaos Engineering Observability: Bringing Chaos Experiments into System Observability”指出在進行混沌工程實驗過程中,系統可觀測性已成為一種“強制性功能”,良好的系統可觀測性會給混沌工程實驗帶來一個強有力的數據支撐,為后續的實驗結果解讀、問題追蹤和最終解決提供了堅實的基礎。
以下是常見混沌工程實驗的觀測指標類型:
- 業務性指標:價值最大,探測難度最大
- 應用健康指標:反映應用的健康狀況
- 其他系統指標:較易獲取,反映基礎設施和系統的運行狀況
以Netflix為例,早在2008年Netflix起步流媒體,手動追蹤數百個指標,全靠人工來檢測問題。 這種方法適用于數十臺服務器和數千臺設備,但不適用于未來的數千臺服務器和數百萬臺設備。最終Netflix找到了一個可以反映業務狀況、用戶參與度的指標:每秒流視頻啟動次數SPS (stream-starts-per-second)。
SPS指標示例比較(紅色=當前周,黑色=前一周)
SPS 模式通常是比較規則的,受到假日和事件等外部影響會有所變化。上圖描繪的就是 SPS 隨時間變化的波動情況,可以看出,它有一個穩定的模式,每天 SPS 峰值發生在晚上,谷值發生在清晨。這是因為人們習慣于在晚餐時間看電視節目。假期時,白天的觀看次數增加,因為有更多的空閑時間在Netflix上觀看節目。
觀測指標對照
如果我們將過去一周的波動圖放在當前的波動圖之上,就像上圖中當前的圖線是紅色,上一周的圖線是黑色,以求找出其中的差異。由此,我們可用“受SPS影響”或“不影響SPS”來衡量業務的狀況。此外,由于 SPS 隨時間的變化可以預期,所以我們可用一周前的 SPS 波動圖作為穩定狀態的模型,并通過使用預期SPS級別與實際SPS級別來衡量業務的可用性。Netflix SPS指標的這種特性,也提醒我們應以觀測指標的<u style="box-sizing: border-box;">穩定狀態</u>進行對照。
不過可行性評估中,我們發現有很多的用戶還是無法定義一個合適的業務指標,如無法準確定義一個穩定狀態,那么我們也可以退而求其次,使用多個指標進行聯合分析來對照。具體的聯合分析方法包括:靜態閾值、指數平滑、雙指數平滑、貝葉斯檢測、馬爾可夫鏈蒙特卡羅方法(MCMC)、魯棒主成分分析(PCA)等等,后面我們可以專門來詳細討論。
實驗場景和環境的設計
實驗場景和環境的設計要努力遵循以下三大設計目標:
- 在生產環境運行實驗
- 持續自動化運行實驗
- 最小化實驗場景的“爆炸半徑”
實驗場景設計
以下是亞馬遜AWS云上常見的實驗場景:
這些場景的實施能力,依賴于實驗工具和平臺框架的選型,后面我們會專門來深入討論。
實驗環境設計
實驗環境的不同,帶來不同的業務風險。生產環境的業務風險最大,開發環境的業務風險最小,其他依次類推。我們會建議用戶在生產環境上進行混沌工程實驗,當然前提是這些實驗場景和工具已經在開發/測試和預生產環境得到了驗證。當然在生產環境上進行混沌工程實驗也不是強制的,用戶可以選擇適合自己的推進節奏,逐步向生產環境靠攏。因為實驗越接近生產環境,從結果中學到的越多。同時,為了體現實驗對照的效果,在生產環境進行的混沌實驗可以通過真實生產流量分支的方式,組建控制組和對照組,以此區分故障注入的影響,從一定程度上控制了爆炸半徑。對于非生產環境的混沌工程實驗,可采用模擬生產流量的方式,盡量和生產流量相似,來驗證實驗場景和工具的可靠性。
綜上,本文是混沌工程專欄的第三篇,首先我們回顧了專欄前兩篇中的重要結論,由此引申出“如何進行對照實驗設計”這個實施性問題,并從實驗可行性評估、觀測指標設計與對照、實驗場景和環境的設計三個維度,深入分析和討論了混沌工程實驗的對照設計原則和方法,后續我們還會針對特定專題進行剖析。