如何作好一次故障演練?

爲何要進行故障演練?

伴隨着海量請求、節假日峯值流量和與日俱增的系統複雜度一塊兒出現的,頗有多是預料之中以及意料以外的各類故障。在不少狀況下,因爲事故處理預案的缺失或者預案自己的不可靠,以及開發人員故障處理經驗的缺失,形成在各類報警之中自亂了陣腳,從而貽誤了最佳戰機。特別是一些平時線上沒出現過的異常故障,一旦忽然出現,每每措手不及。html

系統是否足夠健壯?是否有足夠的能力應對故障的發生?當面臨故障時會出現什麼行爲?咱們並不但願真正線上出現故障時纔去驗證這些問題,這樣風險太大,成本太大。因此但願在線上環境隔離真實流量的狀況下,提早模擬產生各類任何可能發生的故障,來觀察系統的反應,驗證預期策略。數據庫

總結一下,故障演練主要有如下幾個目標:緩存

  1. 確保系統按咱們預想的方式應對故障
  2. 尋找系統中未預料到的弱點
  3. 尋找其餘提升系統魯棒性的方式來避免事故實際發生

理想狀況是達到以下流程化: 例行化故障演練、找出系統風險點、優化業務系統、產出可行有效的故障處理預案網絡

什麼是故障演練?

故障演練是應用高可用能力測評的核心,一次完整的故障演練由演練的對象、對象發生的具體故障、應用的預期故障應對錶現、對應用表現的實際觀察和判斷幾部分組成。架構

(1)演練的對象

演練的對象即演練的位置,能夠針對應用自己,能夠針對應用下游,也能夠針對應用所在機器運維

(2)對象發生的具體故障

常見的故障類型有如下一些:工具

故障類型 舉例
依賴RPC服務故障 超時/不可用
中間件故障 Kafka 超時/不可用,Redis超時/不可用
基礎設施故障 數據庫超時/不可用,DNS 超時/不可用
機器故障 CPU 滿載,網卡流量滿載,網絡中斷,機器宕機,機房斷電,磁盤空間滿載
異常流量 入口流量激增,流量掉零

(3)應用的預期故障應對錶現

也就是預案,針對每種要演練的故障狀況,制定故障應對預案,預案模板參考:post

鏈路/場景 故障 能否演練 影響 應對預案 操做 SOP 實施預案後的影響 預案解除條件 預案解除 SOP 預案實施失敗的應對方案

(4)對應用表現的實際觀察和判斷

這個能夠在監控系統上觀察應用的各項指標表現,好比異常打點,流量打點,業務曲線,機器性能等一系列可能受故障影響的地方。性能

3、故障演練怎麼作?

故障演練前

(1)檢查必備基礎能力

  • 須要應用具有在業務鏈路中完整傳遞染色標記流量的能力
  • 須要應用具有模擬下游依賴服務故障的能力
  • 須要應用具有請求流量錄製\回放\隔離的能力

(2)肯定故障演練範圍、環境

  1. 要對哪些請求流量注入故障?
  • 決策原則: 選擇核心業務鏈路的請求流量
  • 推薦作法: 鏈路分析,標記出核心業務鏈路
  1. 要模擬哪些下游服務的故障?
  • 決策原則: 此下游服務發生故障的機率大 此下游服務發生故障時影響的業務範圍廣 此下游服務發生故障的會影響核心業務 此下游服務發生故障時能制定出可行的應對方案
  • 推薦作法: 依賴鏈路分析,肯定業務鏈路中依賴了哪些下游服務 反向依賴分析,肯定下游服務故障會影響哪些業務鏈路,評估影響的業務範圍
  1. 在哪一個應用環境模擬故障?
  • 決策原則: 所選環境越接近線上生產環境越好
  • 推薦作法: 在線上無真實流量的機器作故障演練(關閉外部真實流量)

(3)回放流量隔離和影子表隔離

  • 流量隔離
  • 影子表隔離

(4)制定故障應對預案

針對每種要演練的故障狀況,制定故障應對預案優化

  • 預案制定原則: 預案得有針對的故障或風險類型,能夠是一個或多個 得肯定預案在什麼狀況下才能啓動/解除,有什麼前置要求條件 預案得確實有效,即:啓動預案後,確實能減少所針對故障的影響範圍 肯定預案開啓後會形成的額外影響,不能引起新的故障

(5)配置故障

(6)肯定演練目標

  1. 肯定所制定故障應對預案確實生效,即:啓動預案後,確實能減少所針對故障的影響範圍

  2. 肯定故障發生時期業務流程按預期運轉(經過業務指標、埋點監控、相關的業務鏈路追蹤工具肯定)

  3. 肯定應用機器的負載指標在預期範圍內(經過各類基礎工具的告警肯定) (根據自身業務特色設置更多的檢查點)

(7)培訓參與的內部人員

(8)通知涉及的外部人員

根據評估出的影響範圍通知相關業務應用 RD、運維 RD、基礎組件 RD。通知內容要素:

  • 故障演練的發起應用
  • 故障演練起止時間
  • 故障演練應用集羣環境
  • 對每一個相關應用的影響預估。好比:對下游依賴服務的調用峯值 QPS、上游服務收到的異常請求比率

推薦作法: 將全部相關人員拉入一個工做羣,羣名「XXX應用故障演練」,在羣裏發送故障演練通知、組織協同

故障演練中

  1. 將錄製的線上流量逐步加壓回放到故障演練的發起應用中的無真實流量機器

  2. 開啓應用的故障模擬開關,觀察故障影響 注意:爲確保不影響真實流量,僅對染色流量發生故障

  3. 啓動應用的故障應對預案

  • 觀察故障影響有無按預期消除或減少影響範圍
  • 觀察各項業務指標
  • 觀察機器負載指標
  • 驗證業務流程按預期運轉(好比:取消展現XX模塊、再也不請求YY接口)

故障演練後

  1. 現場清理
  • 流量關閉、流量隔離任務關閉
  • 故障模擬開關關閉、預案關閉
  • 清理演練期間寫入的數據、緩存、日誌等(可選)
  • 演練期間操做改動的業務配置開關復位
  • 重啓應用
  • 通知相關人員演練結束
  1. 演練報告與總結
  • 是否達到預期目標 預案有無生效 業務流程是否按預期運轉 機器負載是否正常

  • 是否有預期以外的現象發生

  • 關鍵指標(業務指標、機器負載指標)收集整理

  • 整理後續改進點

故障演練何時作?

須要把故障以場景化的方式沉澱,以可控成本在線上模擬故障,讓系統和開發人員平時有更多實戰機會,加速系統、工具、流程、人員的進步。

<常態化,制定演練週期>

故障演練後續規劃

故障演練的後續工做主要會關注在如下方向:演練常態化、故障標類化、演練智能化。

用常態化的演練驅動穩定性進步,豐富更多的故障場景,定義好最小故障場景和處理手段;基於架構和業務分析的智能化演練,沉澱行業故障演練解決方案。

<"todo">


原文連接:www.jackielee.cn/posts/6fb69…

更多精彩請掃描關注公衆號:

相關文章
相關標籤/搜索