伴隨着海量請求、節假日峯值流量和與日俱增的系統複雜度一塊兒出現的,頗有多是預料之中以及意料以外的各類故障。在不少狀況下,因爲事故處理預案的缺失或者預案自己的不可靠,以及開發人員故障處理經驗的缺失,形成在各類報警之中自亂了陣腳,從而貽誤了最佳戰機。特別是一些平時線上沒出現過的異常故障,一旦忽然出現,每每措手不及。html
系統是否足夠健壯?是否有足夠的能力應對故障的發生?當面臨故障時會出現什麼行爲?咱們並不但願真正線上出現故障時纔去驗證這些問題,這樣風險太大,成本太大。因此但願在線上環境隔離真實流量的狀況下,提早模擬產生各類任何可能發生的故障,來觀察系統的反應,驗證預期策略。數據庫
總結一下,故障演練主要有如下幾個目標:緩存
理想狀況是達到以下流程化: 例行化故障演練、找出系統風險點、優化業務系統、產出可行有效的故障處理預案網絡
故障演練是應用高可用能力測評的核心,一次完整的故障演練由演練的對象、對象發生的具體故障、應用的預期故障應對錶現、對應用表現的實際觀察和判斷幾部分組成。架構
演練的對象即演練的位置,能夠針對應用自己,能夠針對應用下游,也能夠針對應用所在機器運維
常見的故障類型有如下一些:工具
故障類型 | 舉例 |
---|---|
依賴RPC服務故障 | 超時/不可用 |
中間件故障 | Kafka 超時/不可用,Redis超時/不可用 |
基礎設施故障 | 數據庫超時/不可用,DNS 超時/不可用 |
機器故障 | CPU 滿載,網卡流量滿載,網絡中斷,機器宕機,機房斷電,磁盤空間滿載 |
異常流量 | 入口流量激增,流量掉零 |
也就是預案,針對每種要演練的故障狀況,制定故障應對預案,預案模板參考:post
鏈路/場景 | 故障 | 能否演練 | 影響 | 應對預案 | 操做 SOP | 實施預案後的影響 | 預案解除條件 | 預案解除 SOP | 預案實施失敗的應對方案 |
---|---|---|---|---|---|---|---|---|---|
這個能夠在監控系統上觀察應用的各項指標表現,好比異常打點,流量打點,業務曲線,機器性能等一系列可能受故障影響的地方。性能
針對每種要演練的故障狀況,制定故障應對預案優化
肯定所制定故障應對預案確實生效,即:啓動預案後,確實能減少所針對故障的影響範圍
肯定故障發生時期業務流程按預期運轉(經過業務指標、埋點監控、相關的業務鏈路追蹤工具肯定)
肯定應用機器的負載指標在預期範圍內(經過各類基礎工具的告警肯定) (根據自身業務特色設置更多的檢查點)
根據評估出的影響範圍通知相關業務應用 RD、運維 RD、基礎組件 RD。通知內容要素:
推薦作法: 將全部相關人員拉入一個工做羣,羣名「XXX應用故障演練」,在羣裏發送故障演練通知、組織協同
將錄製的線上流量逐步加壓回放到故障演練的發起應用中的無真實流量機器
開啓應用的故障模擬開關,觀察故障影響 注意:爲確保不影響真實流量,僅對染色流量發生故障
啓動應用的故障應對預案
是否達到預期目標 預案有無生效 業務流程是否按預期運轉 機器負載是否正常
是否有預期以外的現象發生
關鍵指標(業務指標、機器負載指標)收集整理
整理後續改進點
須要把故障以場景化的方式沉澱,以可控成本在線上模擬故障,讓系統和開發人員平時有更多實戰機會,加速系統、工具、流程、人員的進步。
<常態化,制定演練週期>
故障演練的後續工做主要會關注在如下方向:演練常態化、故障標類化、演練智能化。
用常態化的演練驅動穩定性進步,豐富更多的故障場景,定義好最小故障場景和處理手段;基於架構和業務分析的智能化演練,沉澱行業故障演練解決方案。
<"todo">
原文連接:www.jackielee.cn/posts/6fb69…