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