伴隨著海量請求、節假日峰值流量和與日俱增的系統複雜度一起出現的,很有可能是預料之中以及意料之外的各種故障。在很多情況下,由於事故處理預案的缺失或者預案本身的不可靠,以及開發人員故障處理經驗的缺失,造成在各種報警之中自亂了陣腳,從而貽誤了最佳戰機。特別是一些平時線上沒出現過的異常故障,一旦突然出現,往往措手不及。
總結一下,故障演練主要有以下幾個目標:
確保系統按我們預想的方式應對故障
尋找系統中未預料到的弱點
尋找其他提高系統魯棒性的方式來避免事故實際發生
理想情況是達到如下流程化: 例行化故障演練、找出系統風險點、優化業務系統、產出可行有效的故障處理預案
故障演練是應用高可用能力測評的核心,一次完整的故障演練由演練的物件、物件發生的具體故障、應用的預期故障應對表現、對應用表現的實際觀察和判斷幾部分組成。
演練的物件即演練的位置,可以針對應用本身,可以針對應用下游,也可以針對應用所在機器
故障型別
舉例依賴rpc服務故障
超時/不可用
中介軟體故障
kafka 超時/不可用,redis超時/不可用
基礎設施故障
資料庫超時/不可用,dns 超時/不可用
機器故障
cpu 滿載,網絡卡流量滿載,網路中斷,機器宕機,機房斷電,磁碟空間滿載
異常流量
入口流量激增,流量掉零
也就是預案,針對每種要演練的故障情況,制定故障應對預案,預案模板參考:
鏈路/場景
故障可否演練
影響應對預案
操作 sop
實施預案後的影響
預案解除條件
預案解除 sop
預案實施失敗的應對方案
這個可以在監控系統上觀察應用的各項指標表現,比如異常打點,流量打點,業務曲線,機器效能等一系列可能受故障影響的地方。
(1)檢查必備基礎能力
(2)確定故障演練範圍、環境
要對哪些請求流量注入故障?
要模擬哪些下游服務的故障?
在哪個應用環境模擬故障?
(3)回放流量隔離和影子表隔離
(4)制定故障應對預案
針對每種要演練的故障情況,制定故障應對預案
(5)配置故障
(6)確定演練目標
確定所制定故障應對預案確實生效,即:啟動預案後,確實能減小所針對故障的影響範圍
確定故障發生時期業務流程按預期運轉(通過業務指標、埋點監控、相關的業務鏈路追蹤工具確定)
確定應用機器的負載指標在預期範圍內(通過各種基礎工具的告警確定) (根據自身業務特點設定更多的檢查點)
(7)培訓參與的內部人員
(8)通知涉及的外部人員將錄製的線上流量逐步加壓回放到故障演練的發起應用中的無真實流量機器
開啟應用的故障模擬開關,觀察故障影響 注意:為確保不影響真實流量,僅對染色流量發生故障
啟動應用的故障應對預案
現場清理
演練報告與總結
《常態化,制定演練週期》
故障演練的後續工作主要會關注在以下方向:演練常態化、故障標類化、演練智慧型化。
用常態化的演練驅動穩定性進步,豐富更多的故障場景,定義好最小故障場景和處理手段;基於架構和業務分析的智慧型化演練,沉澱行業故障演練解決方案。
<"todo">
實施工程師如何做好一次調研
實施工程師調研的步驟大致為 1 聯絡使用者經辦人,確定系統涉及到的各部門調研時間表 2 熟悉自己系統的功能,確定涉及到各部門的業務與功能有哪些,提前準備調研提綱 3 確定決定系統的干係人,哪些為重要且影響大的,然後分部分調研 4 調研過程中是使用者理清自己思路的過程,在調研方案沒有出來之前,使用者說...
記一次manila故障
排查過程 1.檢視manila的日誌,api.log scheduler.log share.log,排程日誌最具參考性,但是顯示建立成功 實際狀態為creating 排到share時出現大量報錯 get all share usage failed 2.檢查後端儲存,節點均正常 排查過程 1.關閉...
軟體測試之做好一次
生而為人都是比較感性的動物,儘管每個個體差異都很大,但是不可否認的乙個相同點就是追求完美。甭管當下你是否還保留這一美德,起碼在你出生的時候,父母肯定是教育你要好好做事,盡心盡力,一次做好。作為一名職業測試工程師,追求完美是必要職業技能。因為這使你在陷入迷茫時有目標,在腹背為敵時有動力,在重重困難時有...