如何做好一次故障演練?
本文轉載自微信公眾號「隨猿記」,轉載本文請聯系隨猿記公眾號。
為什么要進行故障演練?
伴隨著海量請求、節假日峰值流量和與日俱增的系統復雜度一起出現的,很有可能是預料之中以及意料之外的各種故障。在很多情況下,由于事故處理預案的缺失或者預案本身的不可靠,以及開發人員故障處理經驗的缺失,造成在各種報警之中自亂了陣腳,從而貽誤了***戰機。特別是一些平時線上沒出現過的異常故障,一旦突然出現,往往措手不及。
系統是否足夠健壯?是否有足夠的能力應對故障的發生?當面臨故障時會出現什么行為?我們并不希望真正線上出現故障時才去驗證這些問題,這樣風險太大,成本太大。所以希望在線上環境隔離真實流量的情況下,提前模擬產生各種任何可能發生的故障,來觀察系統的反應,驗證預期策略。
總結一下,故障演練主要有以下幾個目標:
- 確保系統按我們預想的方式應對故障
- 尋找系統中未預料到的弱點
- 尋找其他提高系統魯棒性的方式來避免事故實際發生
理想情況是達到如下流程化: 例行化故障演練、找出系統風險點、優化業務系統、產出可行有效的故障處理預案
什么是故障演練?
故障演練是應用高可用能力測評的核心,一次完整的故障演練由演練的對象、對象發生的具體故障、應用的預期故障應對表現、對應用表現的實際觀察和判斷幾部分組成。
(1)演練的對象
演練的對象即演練的位置,可以針對應用本身,可以針對應用下游,也可以針對應用所在機器
(2)對象發生的具體故障
常見的故障類型有以下一些:
(3)應用的預期故障應對表現
也就是預案,針對每種要演練的故障情況,制定故障應對預案,預案模板參考:
鏈路/場景故障可否演練影響應對預案操作 SOP實施預案后的影響預案解除條件預案解除 SOP預案實施失敗的應對方案
(4)對應用表現的實際觀察和判斷
這個可以在監控系統上觀察應用的各項指標表現,比如異常打點,流量打點,業務曲線,機器性能等一系列可能受故障影響的地方。
故障演練怎么做?
故障演練前
1. 檢查必備基礎能力
- 需要應用具備在業務鏈路中完整傳遞染色標記流量的能力
- 需要應用具備模擬下游依賴服務故障的能力
- 需要應用具備請求流量錄制\回放\隔離的能力
2. 確定故障演練范圍、環境
(1) 要對哪些請求流量注入故障?
- 決策原則:
選擇核心業務鏈路的請求流量
- 推薦做法:
鏈路分析,標記出核心業務鏈路
(2) 要模擬哪些下游服務的故障?
- 決策原則:
此下游服務發生故障的機率大
此下游服務發生故障時影響的業務范圍廣
此下游服務發生故障的會影響核心業務
此下游服務發生故障時能制定出可行的應對方案
- 推薦做法:
依賴鏈路分析,確定業務鏈路中依賴了哪些下游服務
反向依賴分析,確定下游服務故障會影響哪些業務鏈路,評估影響的業務范圍
(3) 在哪個應用環境模擬故障?
- 決策原則:
所選環境越接近線上生產環境越好
- 推薦做法:
在線上無真實流量的機器做故障演練(關閉外部真實流量)
3. 回放流量隔離和影子表隔離
- 流量隔離
- 影子表隔離
4. 制定故障應對預案
針對每種要演練的故障情況,制定故障應對預案
- 預案制定原則:
預案得有針對的故障或風險類型,可以是一個或多個
得確定預案在什么情況下才能啟動/解除,有什么前置要求條件
預案得確實有效,即:啟動預案后,確實能減小所針對故障的影響范圍
確定預案開啟后會造成的額外影響,不能引發新的故障
5. 配置故障
6. 確定演練目標
- 確定所制定故障應對預案確實生效,即:啟動預案后,確實能減小所針對故障的影響范圍
- 確定故障發生時期業務流程按預期運轉(通過業務指標、埋點監控、相關的業務鏈路追蹤工具確定)
- 確定應用機器的負載指標在預期范圍內(通過各種基礎工具的告警確定)
(根據自身業務特點設置更多的檢查點)
7. 培訓參與的內部人員
8. 通知涉及的外部人員
根據評估出的影響范圍通知相關業務應用 RD、運維 RD、基礎組件 RD。通知內容要素:
- 故障演練的發起應用
- 故障演練起止時間
- 故障演練應用集群環境
- 對每個相關應用的影響預估。比如:對下游依賴服務的調用峰值 QPS、上游服務收到的異常請求比率
推薦做法:
將所有相關人員拉入一個工作群,群名「XXX應用故障演練」,在群里發送故障演練通知、組織協同
故障演練中
1.將錄制的線上流量逐步加壓回放到故障演練的發起應用中的無真實流量機器
2.開啟應用的故障模擬開關,觀察故障影響
注意:為確保不影響真實流量,僅對染色流量發生故障
3.啟動應用的故障應對預案
- 觀察故障影響有無按預期消除或減小影響范圍
- 觀察各項業務指標
- 觀察機器負載指標
- 驗證業務流程按預期運轉(比如:取消展示XX模塊、不再請求YY接口)
故障演練后
1.現場清理
- 流量關閉、流量隔離任務關閉
- 故障模擬開關關閉、預案關閉
- 清理演練期間寫入的數據、緩存、日志等(可選)
- 演練期間操作改動的業務配置開關復位
- 重啟應用
- 通知相關人員演練結束
演練報告與總結
- 是否達到預期目標
預案有無生效
業務流程是否按預期運轉
機器負載是否正常
- 是否有預期之外的現象發生
- 關鍵指標(業務指標、機器負載指標)收集整理
- 整理后續改進點
故障演練什么時候做?
需要把故障以場景化的方式沉淀,以可控成本在線上模擬故障,讓系統和開發人員平時有更多實戰機會,加速系統、工具、流程、人員的進步。
<常態化,制定演練周期>
故障演練后續規劃
故障演練的后續工作主要會關注在以下方向:演練常態化、故障標類化、演練智能化。
用常態化的演練驅動穩定性進步,豐富更多的故障場景,定義好最小故障場景和處理手段;基于架構和業務分析的智能化演練,沉淀行業故障演練解決方案。