當前微服務架構下,各個服務間依賴高,呼叫關係複雜,業務場景很少可以通過一個系統來實現,常見的業務場景實現基本涉及多個上下游系統,要保證整體鏈路的穩定性,需要儘量減少系統之間的耦合性,避免因為單點失效引起整個鏈路的故障。
通過混沌演練驗證鏈路中部分系統發生故障時候的整體鏈路的表現,對鏈路保持正常運作的能力進行校驗和評估,提前識別未知隱患並進行修復,進而保障整個鏈路更好地抵禦生產環境中的失控條件,提升整體場景功能的穩定性。
對真實的業務場景進行混沌演練,就需要對業務場景的相關服務和呼叫關係進行鏈路梳理,一般需要根據實際業務場景,畫出系統互動圖,通過鏈路串聯、資料追蹤、和上下游確認等方式整理鏈路圖。
混沌演練之前,一定要好可行性評估,評估可以演練的服務部署環境、演練工具的成熟度、演練場景的爆炸半徑等,然後決策演練場景,進行實踐操作。
內容載入鏈路演練,通過內容載入的系統互動梳理出載入鏈路:摹略引擎執行-AB分流-CMS資源獲取-鷹眼內容傳送
根據調鏈路呼叫關係用梳理出具體的介面:
演練時間:2023.03.28 14:00-22:00
演練攻擊人員:孫X英、陳X然; 演練防守人員:張X雷、付X軍、劉X、韓X
針對鏈路介面設計演練場景,一般根據系統特色來設計更容易發生的故障,比如應用偏計算比較消耗CPU的話,故障設計包含CPU滿載,應用對於響應的時效有嚴格的要求的話一般包含方法延遲故障設計。
本次鏈路故障場景設計如下:
具體演練場景設計可參考:混沌實戰演練(一)
目前藉助天權自動化運維平臺進行混沌攻防演練,進入工具市場—演練類,選擇不同的故障方案,點選「立即執行」;
如選擇Java程序滿載場景演練,選擇滿載率100%,滿載核數為演練應用部署服務的CPU核數,演練時長是執行滿載的持續時間,選擇演練的具體應用和指定IP,執行演練計劃。
演練範例,根據演練的場景設定好故障引數,如下圖為精準觸達系統-訊息觸達方法延遲增加30ms引數設定:
演練執行結果檢查,下圖為分流服務-JAVA程序滿載,指定分流程序CPU滿載,故障執行結果:
使用監控工具實時收集伺服器在混沌演練執行期間的效能狀態,如系統層面的 CPU、記憶體等使用情況,觀察方法的響應時間、成功率等指標,一方面驗證在混沌場景執行期間系統狀態是否達到預期的效果,同時記錄演練期間發生的問題,記錄現場,另一方面通過監控發現有風險問題進行人工干預,立刻終止演練。
場景一:精準觸達系統-訊息觸達方法延遲增加30ms
演練監控方法執行的成功率和 TP 999:
場景二:分流服務-JAVA程序滿載,指定分流程序CPU滿載
監控平臺實時觀測系統的CPU使用率:
檢查系統故障發生時候監控手段是否完善,研發人員是否可以根據系統告警,快速的定位並解決問題。檢查團隊的響應、協同效率。
郵件事故告警:
事故恢復告警:
場景演練可等待演練時長結束後自行中止,也可根據手工取消、終止演練場景。
演練完成後建議需要重啟容器,保證服務恢復正常狀態。
演練結束之後,我們需要對演練進行復盤。不同的故障下,系統的表現以及整體業務場景所受到的影響,演練過程中所發現的問題,需要在覆盤報告中呈現出來。
鏈路演練通過提前主動注入故障,發現系統之間的強弱依賴,對鏈路進行檢驗,降低生產環境中故障發生的概率。
「居安思危,思則有備,有備無患。」
作者:京東科技 孫民英
內容來源:京東雲開發者社群