混沌工程是通過主動製造故障場景並根據系統在各種壓力下的行為表現確定優化策略的一種系統穩定性保障手段,簡單說就是通過主動注入故障的方式、提前發現問題,然後解決問題規避風險。
隨著網際網路業務發展,微服務架構、分散式架構和虛擬化容器技術的廣泛普及,軟體架構的複雜度在不斷提升,服務之間的依賴所帶來的不確定性也成指數級增長,在這樣的服務呼叫網中,任何一環出現的正常或者異常的變化,都有可能對其他服務造成類似蝴蝶效應一般的影響。目前行銷體系的服務量級不斷增加,整體鏈路增長以及資料流轉複雜,對整個系統的可用性、穩定性挑戰也越來越大,所以引入混沌演練,主動找出系統中的脆弱環節,然後針對性地進行加固、防範,從而避免故障發生時所帶來的嚴重後果,進一步提升業務系統的高可用,提高業務系統應急保障能力。
應用混沌演練可以對系統抵抗擾動並保持正常運作的能力進行校驗和評估,提前識別未知隱患並進行修復,進而保障系統更好地抵禦生產環境中的失控條件,提升整體穩定性。
目前藉助京東雲RPA自動化服務平臺進行混沌攻防演練,測試人員為紅方(攻擊方),研發人員為藍方(防守方),紅方隨機挑選一個時間段,針對服務系統注入故障(比如:CPU使用率達到100%、網路延遲、JSF介面響應延遲等),藍方負責故障感知以及應急處理,通過這樣的方式,達到針對系統高可用的應急演練。
紅方:
建立演練計劃: 通過存取RPA自動化服務平臺,進入工具市場——演練類,選擇不同的故障方案,點選「立即執行」;
演練設定: 點選執行後,進入設定頁面,選擇執行環境,選取要演練的應用,並隨機選取要演練的範例IP;
執行演練: 演練任務建立完成後,在對應的演練時間範圍內,審批通過後,開始按照選擇的演練任務開始執行;
藍方:
故障排查: 在演練過程中,藍方通過報警資訊,先對模擬故障的範例機器,進行排查;
恢復方案: 演練中發現問題要及時恢復,演練後對模擬故障的範例機器進行重啟恢復,確保機器正常執行,各項效能指標恢復;
混沌演練準備階段是設計演練策略,主要有設定演練的考核目標,選擇演練的場景、應用和機器,生成相應的演練計劃,周知相關人員。
其中準備階段最重要的是做好風險評估 ,根據系統的等級或者混沌的成熟度,初期演練一些簡單的事件比如高CPU、高記憶體;等系統抵抗力逐步提升演練比較高階的事件如網路延遲、程序終止等。
演練場景執行,執行故障注入,測試人員應觀察紀錄檔和系統監控,記錄指標變動情況。
執行場景JSF介面響應延遲100ms,因介面超時時間為50ms,可以在監控圖中看到故障注入期間介面超時失敗率100%
故障發現及排查定位:演練進行中,藍方事先不知道演練哪些故障場景(目前是通過預發演練,研發側能明確受影響的機器),藍方通過收到報警,對報警資訊進行排查,摹略引擎系統針對報警資訊做出反應和應急處理。
藍方發現故障 CPU使用率負載故障,報警機器與演練機器相同,重啟服務後,應用伺服器響應正常,可用率恢復;
通過本次演練,發現兩個待優化的點:
1.CPU使用負載的演練場景,發現了監控告警郵件延遲,建議增加電話和咚咚報警策略;
藉助於平臺進行混沌演練,可以降低演練的學習成本,提高演練的效率,目前平臺對於常用的演練場景已經支援,大家可以在平臺進入工具市場選擇相應的演練場景。
混沌演練結束後,需要根據演練執行過程和結果,記錄演練流程和對應監控指標變化情況,總結存在的問題以及優化方案發出演練報告,對於演練中的關注指標主要是從故障「發現-定位-恢復」的時效性指標,下面具體介紹了在實踐演練中需要重點關注的指標,如是否有告警監控、系統容錯能力情況,以及響應機制,其中最後灰色部分高可用指標屬於探索部分,會隨著系統當前的實際情況和業務不同有變化,作為探索性指標。
混沌演練會對業務和系統產生破壞性,為了限制發現應用程式漏洞的成本,避免不必要的損壞和超出合理測試允許的實際損失對混沌演練做好風險控制是非常必要的。做好風險控制,將演練控制在一個較小的範圍內,避免由於演練失控帶來的更大問題。目前在進行混沌演練實踐主要通過以下兩個方面進行風險控制:
儘管混沌演練的好處是顯而易見的,但它是一種應該慎重進行的實踐。