混沌演練實踐(二)-支付加掛鏈路演練

2023-05-24 12:00:41

1. 背景

當前微服務架構下,各個服務間依賴高,呼叫關係複雜,業務場景很少可以通過一個系統來實現,常見的業務場景實現基本涉及多個上下游系統,要保證整體鏈路的穩定性,需要儘量減少系統之間的耦合性,避免因為單點失效引起整個鏈路的故障。

2. 目標

通過混沌演練驗證鏈路中部分系統發生故障時候的整體鏈路的表現,對鏈路保持正常運作的能力進行校驗和評估,提前識別未知隱患並進行修復,進而保障整個鏈路更好地抵禦生產環境中的失控條件,提升整體場景功能的穩定性。

3. 演練鏈路

對真實的業務場景進行混沌演練,就需要對業務場景的相關服務和呼叫關係進行鏈路梳理,一般需要根據實際業務場景,畫出系統互動圖,通過鏈路串聯、資料追蹤、和上下游確認等方式整理鏈路圖。

4. 演練計劃

混沌演練之前,一定要好可行性評估,評估可以演練的服務部署環境、演練工具的成熟度、演練場景的爆炸半徑等,然後決策演練場景,進行實踐操作。

5. 內容載入演練實踐

5.1 鏈路梳理

內容載入鏈路演練,通過內容載入的系統互動梳理出載入鏈路:摹略引擎執行-AB分流-CMS資源獲取-鷹眼內容傳送

5.2 介面梳理

根據調鏈路呼叫關係用梳理出具體的介面:

5.3 制定演練計劃

演練時間:2023.03.28 14:00-22:00

演練攻擊人員:孫X英、陳X然; 演練防守人員:張X雷、付X軍、劉X、韓X

針對鏈路介面設計演練場景,一般根據系統特色來設計更容易發生的故障,比如應用偏計算比較消耗CPU的話,故障設計包含CPU滿載,應用對於響應的時效有嚴格的要求的話一般包含方法延遲故障設計。

本次鏈路故障場景設計如下:

具體演練場景設計可參考:混沌實戰演練(一)

5.4 演練執行

目前藉助天權自動化運維平臺進行混沌攻防演練,進入工具市場—演練類,選擇不同的故障方案,點選「立即執行」;

如選擇Java程序滿載場景演練,選擇滿載率100%,滿載核數為演練應用部署服務的CPU核數,演練時長是執行滿載的持續時間,選擇演練的具體應用和指定IP,執行演練計劃。

演練範例,根據演練的場景設定好故障引數,如下圖為精準觸達系統-訊息觸達方法延遲增加30ms引數設定:

演練執行結果檢查,下圖為分流服務-JAVA程序滿載,指定分流程序CPU滿載,故障執行結果:

5.5 演練監控

使用監控工具實時收集伺服器在混沌演練執行期間的效能狀態,如系統層面的 CPU、記憶體等使用情況,觀察方法的響應時間、成功率等指標,一方面驗證在混沌場景執行期間系統狀態是否達到預期的效果,同時記錄演練期間發生的問題,記錄現場,另一方面通過監控發現有風險問題進行人工干預,立刻終止演練。

場景一:精準觸達系統-訊息觸達方法延遲增加30ms

演練監控方法執行的成功率和 TP 999:

場景二:分流服務-JAVA程序滿載,指定分流程序CPU滿載

監控平臺實時觀測系統的CPU使用率:

5.6 演練反饋

檢查系統故障發生時候監控手段是否完善,研發人員是否可以根據系統告警,快速的定位並解決問題。檢查團隊的響應、協同效率。

郵件事故告警:

事故恢復告警:

5.7 環境恢復

場景演練可等待演練時長結束後自行中止,也可根據手工取消、終止演練場景。

演練完成後建議需要重啟容器,保證服務恢復正常狀態。

5.8 演練覆盤

演練結束之後,我們需要對演練進行復盤。不同的故障下,系統的表現以及整體業務場景所受到的影響,演練過程中所發現的問題,需要在覆盤報告中呈現出來。

6.總結

鏈路演練通過提前主動注入故障,發現系統之間的強弱依賴,對鏈路進行檢驗,降低生產環境中故障發生的概率。

「居安思危,思則有備,有備無患。」

作者:京東科技 孫民英

內容來源:京東雲開發者社群