乾貨 混沌工程落地的六個階段

2021-09-29 15:55:53 字數 3282 閱讀 7288

從筆者所在團隊的實踐出發,我們將混沌工程總結為六個階段,並對各個階段的落地過程加以總結,希望能夠對大家落地混沌工程有所幫助。今天主要是拋磚引玉,後續針對每個階段,陸續會有專門的文章進行介紹。而混沌工程理論相關的部分,大家可以參考由 netflix 出版的《混沌工程》迷你書。

混沌工程落地的六個階段

上述各階段涉及的部門和人員的數量,遠遠超過了當初的預估,因此該部分成為我們確定順序的最主要因素,強烈建議大家實施混沌工程,一定要爭取來自於管理層的支援以及周邊團隊的理解和配合,否則很容易導致專案虎頭蛇尾。

單機破壞

重要性說明

以集群選主機制為例說明單機破壞的優先順序和重要性,如果單機在某些場景異常後,集群無法選主,進而導致系統整體不可用。該問題如果在單機房破壞場景時才發現,那系統整體不可用了,你還能找出啥別的問題呢?乙個機房的破壞場景,往往涉及多個部門的聯動,大部分業務團隊的各類角色均會參與其中,難道最後就得到乙個結論:選主機制有問題。如果真是這樣,你還打算繼續幹下去嗎?

排序考慮

單機破壞能夠在測試環境中發現絕大多數問題,並能掃清後續階段的阻塞點,因此排在首位可謂是當之無愧。

破壞手段

在測試環境下,先從重啟伺服器開始,然後是關機,資源異常(如 cpu 打滿)等場景。注意單機破壞場景不要把自己」拒之門外」。舉個例子,把機器的 cpu 打滿,但是沒有設定打滿的時長,結果自己也無法登入機器了,只能重啟。

落地建議

單機房破壞

重要性說明

單機房故障是造成服務整體崩潰的主要原因之一,全球網際網路巨頭大多發生過單機房故障導致服務崩潰的情形。諸如外網出口異常,內網跨機房專線異常,機房核心交換機異常,各種網路抖動和擁塞,idc 供電裝置異常等等,相信大家都不陌生,因此其重要性可見一斑。

排序考慮

高頻故障場景,故障後影響較為嚴重,業界有較多的最佳實踐可供參考,模擬單機房破壞的難度和風險均較低,因此緊隨單機破壞其後。

重破壞手段

將跨機房的專線埠關閉即可,恢復則是將埠重新 up 即可,整個耗時可以控制在秒級。演練前,業務方需要提前將流量遷移到其他機房,觀察跨機房的殘餘流量符合預期後再進行操作,否則就對殘餘流量進行排查,從而避免發生較為嚴重的故障。

落地建議

依賴治理

重要性說明

依賴主要是第三方依賴和基礎設施,包括但不限於 mysql、redis、k8s、dns、lb、elk、hadoop 等,上述任何服務的故障,對業務影響都極為嚴重。以近期發生的 aws 的 dns 故障為例,持續 15 小時,多個業務受損。

排序考慮

基礎設施可謂是牽一發動全身,故障頻率低,故障影響大,因此依賴治理放在了單機和單機房之後。

破壞手段

基礎服務和一般的業務場景無區別,主要也是通過單機破壞和單機房破壞等通用手段來進行快速的問題識別。

落地建議

全鏈路故障注入

重要性說明

所謂的精準注入,只影響特定的客戶 id、地域、裝置型別、介面,還可以對注入的行為和比例等進行精準控制,從而大幅縮小故障範圍,將故障的風險收斂到最小。因為是精準注入,因此必須具備全鏈路的觀測能力,才能夠將上述的細微的注入影響進行描述,否則,你可能很難回答,延時增加了 3s,是哪些模組的作用導致的。

傳統的破壞方式,粒度只能控制在單機級別,很多影響非預期且及不可控。以 tc 命令為例,如果是按照一定比例進行破壞,你無法精準控制哪些請求會受到影響,運氣足夠差的情況下,也許你不希望被影響的請求全軍覆沒,而你期望被影響的請求則無一命中。另外,傳統的破壞方式也沒有統一的標準,有些需要用 tc 命令,有些是 iptables 命令,有些是寫死 /etc/hosts 檔案,沒有方便易用的方式,且本身存在較大的風險,很難進行大範圍推廣。下面是兩者的對比:

排序考慮全鏈路追蹤能力是故障注入的基礎,需要所有的模組全部進行適配改造,否則呼叫鏈就會在某個階段中斷,進而導致不可完全追蹤。同時對於一些開源軟體,也需要進行適配,其成本是前四個階段中最高的,耗時最長的,因此,故障注入往往會放在後期。

破壞手段

落地建議

對系統進行分級,首先將**流程進行改造,確保最核心的功能具備了能力,然後慢慢外擴到所有功能

ci/cd 整合

產品化

雖然通過 ci/cd 階段的整合,可以將問題攔截在測試階段,但這時候,每次都是測試階段發現問題後讓研發返工,對於研發就造成了極大的資源浪費。因此,需要將混沌工程形成的各種標準和規範,以產品化的形式交給研發同學使用,進而讓大家都滿意。

以單機起停指令碼為例進行說明,每個模組的研發不同,可能存在的問題也不一樣,這時候,發現問題後進行修改,不如提供乙個統一的服務起停管理工具給研發使用,從而徹底解決該問題。開源軟體類似 systemd,supervisor 和 monit 都可以很好的解決這類問題,且對程式沒有侵入性,不存在什麼改造成本。

再高階一些,就可以參考 netflix 開源的各種軟體

人生的六個階段

人生的六個階段 潛龍勿用 見龍在田 終日乾乾 或躍在淵 飛龍在天 亢龍有悔 上述幾詞均出自易經六十四卦中的第一卦乾卦,乾為天 卦名 乾為天 的卦象是幹上幹下,由六條線段疊合而成。它象徵著天是至高至大,覆蓋萬物又不偏不倚,天行健,君子當以自強不息。原文 幹 元 享 利 貞。其意為 天是創造萬物的根元,...

軟體高手的六個階段

程式設計師怎樣才能達到程式設計的最高境界?最高境界絕對不是你去編兩行 或者是幾分鐘能寫幾行 或者是用什麼所謂的視覺化工具產生最少的 這些工作,這都不是真正的高手境界。即使是這樣的高手,那也都是無知者的自封。乙個程式設計師的成長可分為如下六個階段。第一階段 能熟練地使用某種語言。這就相當於練武中的套路...

高手成長的六個階段

程式設計師怎樣才能達到程式設計的最高境界?最高境界絕對不是你去編兩行 或者是幾分鐘能寫幾行 或者是用什麼所謂的視覺化工具產生最少的 這些工作,這都不是真正的高手境界。即使是這樣的高手,那也都是無知者的自封。我認為,乙個程式設計師的成長可分為如下六個階段。第一階段 此階段主要是能熟練地使用某種語言。這...