為什么你需要混沌工程以及 Chaos Mesh

信心的毀滅與重建

在我最開始學習編程的時候筐乳,我一直覺得寫程序是很簡單的事情隘马,程序總是按照我的想法串行的執(zhí)行的野宜,給一個輸入扫步,總是有著符合預期的固定輸出。那時候?qū)懘a匈子,可能大的挑戰(zhàn)在于理解分支河胎,循環(huán),但無論怎樣虎敦,只要控制得當游岳,事情總是確定的。

那段時間可以算是非称溽悖快樂的日子吭历,直到我遇到了多線程,人生中第一次有了『自信被打破』的恐慌擂橘,在多線程的世界里,事情不會在按照我想的方式來正常的運轉(zhuǎn)摩骨,我需要考慮 data racing通贞,需要考慮 memory ordering朗若。幸運的是,在經(jīng)歷了短暫的不適應之后昌罩,很快我就能很好的擁抱并發(fā)了哭懈,畢竟我們這個世界本來就是在并行運轉(zhuǎn)的。雖然寫多線程程序相比之前更加的困難茎用,但其實只要掌握了一些多線程的并發(fā)原語遣总,知道如何使用 mutex,semaphore轨功,channel 這些旭斥,其實會發(fā)現(xiàn)多線程的世界也是蠻有意思的。再加上古涧,新一代的編程語言垂券,無論是 Go,還是 Rust羡滑,都能讓大家更加游刃有余的處理并發(fā)問題菇爪,只要處理得當,給定一個輸入柒昏,仍然能得到我們想要的輸出凳宙。只不過,這時候要保證確定性要比之前困難了很多职祷。

但好景不長氏涩,在駕馭了多線程之后,我的『自信再一次被打破』了堪旧,因為我進入了分布式系統(tǒng)的世界削葱,在這個世界里面,一切都變得不在確定淳梦。給定一個輸入析砸,我可能得到的結(jié)果是未知,因為我不知道這個執(zhí)行在遠端是否被正常的執(zhí)行了爆袍。而人類對于未知恰恰是最恐慌的首繁。我不知道我的系統(tǒng)什么時候會出現(xiàn)網(wǎng)絡異常,或者磁盤什么時候突然壞掉陨囊,或者機房是不是突然斷掉了弦疮,一切的一切,對我來說都是未知的蜘醋,譬如下面是我們在實際中遇到的一個問題:

我們的用戶將 TiDB 運行在國內(nèi)某云廠商的機器上面胁塞,然后跟我們反映,讀延遲會不定期的增長,我們看了看監(jiān)控啸罢,發(fā)現(xiàn)唯一的異常指標就是 Cached 的 memory 那段時間會突然下降编检。當時真的就懵逼了,完全不知道是為啥扰才,最終發(fā)現(xiàn)允懂,云廠商的運維監(jiān)控腳本里面有個 bug,會不定期的將磁盤熱拔插衩匣,并且將現(xiàn)有的 page cache 刷到磁盤蕾总,所以那段時間 TiDB 的 read 操作很多是從磁盤重新讀取數(shù)據(jù)的。

可以看到琅捏,分布式系統(tǒng)真的是一個非常復雜的系統(tǒng)生百,故障無處不在,那么我們?nèi)绾卧谶@么復雜的分布式系統(tǒng)的世界里面生存下去呢午绳?現(xiàn)在置侍,一個很好的答案就是 - Chaos Engineering,中文里面叫做混沌工程拦焚。

混沌工程

相比于我們成天擔驚受怕系統(tǒng)會出現(xiàn)什么樣的問題蜡坊,還不如提前就模擬線上環(huán)境可能出現(xiàn)的各種情況,來看我們的系統(tǒng)是否能做到容錯赎败,仍然能繼續(xù)對外提供服務秕衙。當然,我們并不是簡單的就在線上環(huán)境上面僵刮,把機器給斷電据忘,或者把網(wǎng)線給拔掉,在混沌工程領(lǐng)域搞糕,有一套指導原則勇吊,以及標準的實驗步驟,具體的可以參考 PRINCIPLES OF CHAOS ENGINEERING 窍仰。

簡單來說汉规,要做一次混沌實驗,我們只需要做到如下的 4 個步驟:

  1. 定義系統(tǒng)的穩(wěn)態(tài)驹吮,這個穩(wěn)態(tài)就是系統(tǒng)在正常運行的時候一些指標针史,譬如當前請求的 QPS,latency 這些碟狞。
  2. 將系統(tǒng)分為實驗組以及對照組啄枕,做出一個假設,譬如我在實驗組引入一個故障族沃,這個穩(wěn)態(tài)仍然能在實驗組保持频祝。
  3. 執(zhí)行試驗泌参,給實驗組引入現(xiàn)實世界中的故障,譬如拔掉網(wǎng)卡常空。
  4. 驗證第 2 步的假設是否成立及舍,如果實驗組的穩(wěn)態(tài)跟對照組不一樣了,證明我們的系統(tǒng)在第 3 步的故障中不能很好的容錯窟绷,所以我們需要改進。

可以看到咐柜,上面的步驟非常的簡單兼蜈,但要在實際從很好的做混沌試驗,還是有一些困難的拙友,主要在以下幾點:

  1. 自動化为狸,我們需要有一套自動化的系統(tǒng)幫我們進行故障注入,進行假設對比等遗契。
  2. 盡可能多的引入不同故障》簦現(xiàn)實環(huán)境中可能會出現(xiàn)非常多的故障,僅僅不是拔網(wǎng)線這么簡單牍蜂,所以引入的故障越多越好漾根。
  3. 業(yè)務方無感知。如果我們每次做混沌試驗鲫竞,都要業(yè)務系統(tǒng)去配合辐怕,譬如在業(yè)務里面寫一些混沌相關(guān)的代碼,讓混沌試驗調(diào)用从绘,或者更改系統(tǒng)的部署邏輯寄疏,跟混沌試驗配合,這種的就屬于緊耦合的僵井。

你好陕截,ChaosMesh!E病农曲!

所以,為了讓大家更好的做混沌試驗渊季,我們開發(fā)了 ChaosMesh朋蔫,ChaosMesh 是一套基于 Kubernetes 的云原生混沌工程平臺。ChaosMesh 的架構(gòu)如下:

相比于其他混沌平臺却汉,ChaosMesh 有如下優(yōu)勢:

  1. 基于 K8s驯妄,只要你的系統(tǒng)能跑在 K8s 上面,那么就可以無縫的集成 ChaosMesh合砂,而且不用修改任何業(yè)務代碼青扔,真正是被測系統(tǒng)無感知。
  2. 多種多樣的故障注入。ChaosMesh 能全方位的幫你對網(wǎng)絡微猖,磁盤谈息,文件系統(tǒng),操作系統(tǒng)等進行故障注入凛剥。我們后面也會提供對 K8s侠仇,或者云服務自身進行 chaos 的能力。
  3. 易于使用犁珠,你無需關(guān)注 ChaosMesh 的底層實現(xiàn)細節(jié)逻炊,只需用 YAML 配置好混沌試驗,就可以實施犁享,后面所有的實驗是全自動化的余素。我們也提供了 Dashboard 能讓你在網(wǎng)頁上就輕松的進行試驗。
  4. 可觀測性炊昆,ChaosMesh 的 Dashboard 能很方便的讓你觀測系統(tǒng)桨吊,知道什么時候進行了什么試驗,知道你自己的系統(tǒng)當前的運行情況凤巨,當然视乐,這里需要一點配置,你需要告訴 ChaosMesh 如何去獲取你系統(tǒng)的穩(wěn)態(tài)指標磅甩,譬如你的系統(tǒng)使用 Prometheus炊林,那么就可以告訴 ChaosMesh 如何去 Prometheus 查詢相關(guān)的監(jiān)控指標。
  5. 強大的開源社區(qū)支持卷要,ChaosMesh 的社區(qū)成長的非常迅速渣聚,我們非常高興的看到大部分的功能已經(jīng)由社區(qū)支持,并且也有很多用戶僧叉。你無需擔心遇到問題不知道如何解決奕枝,當然,你可能要擔心下 ChaosMesh 做實驗的時候把你的數(shù)據(jù)給完全干掉瓶堕,所以做實驗的時候一定要控制好實驗半徑隘道,這個也是混沌工程的一條原則。

來一次 Chaos 實驗郎笆?

在我們開始一次 Chaos 實驗之前谭梗,你首先需要滿足兩個條件:

  1. 你自己的業(yè)務是跑在 K8s 上面的
  2. 在 K8s 上面安裝了 ChaosMesh

另外,在開始實驗之前宛蚓,這里我還是要強調(diào)一下 Chaos 實驗的一些注意事項激捏,可能你覺得我這個大叔很啰嗦,但小心駛得萬年船凄吏,因為稍微一不注意远舅,你可能就丟了數(shù)據(jù)了闰蛔。

  1. 如果你剛準備將你的系統(tǒng)應用 ChaosMesh,一定要保證首先在測試環(huán)境中使用图柏。你的系統(tǒng)應該還非常的脆弱序六,如果在線上進行試驗,會非常的危險蚤吹。
  2. 在生產(chǎn)系統(tǒng)中例诀,一定要控制好試驗的爆炸半徑,控制好影響范圍裁着,譬如我們可以先對某一個街道的用戶進行干擾余佃,然后在擴大到某一個區(qū)域,或者某一個城市跨算,如果我們一開始的影響半徑就很大,一個稍微不留意椭懊,你的 boss 就可能讓你第二天滾蛋了诸蚕。
  3. 做混沌實驗一定不是隨機的瞎做實驗,我們是帶有目的的氧猬,是需要規(guī)劃好的背犯,與其漫無目的的對系統(tǒng)隨機進行故障注入,我們還不如先問自己一個問題『為了對系統(tǒng)在混亂狀況下的表現(xiàn)更有信心盅抚,在哪里做混沌實驗最有價值漠魏?』也就是我們要熟悉了解我們的系統(tǒng),做高杠桿價值的混沌實驗妄均。

好了柱锹,現(xiàn)在你已經(jīng)完全準備好了,現(xiàn)在就可以踏上混沌之旅了丰包,因為 ChaosMesh 的使用是如此簡單禁熏,你只需要參考 用戶指南 就能上手使用,所以我就不過多介紹了邑彪,譬如下面的演示:

如果你仍然遇到了問題瞧毙,歡迎給 ChaosMesh 提 issue,相信我寄症,ChaosMesh 社區(qū)會很熱情的幫你解決問題的宙彪。

總結(jié)

隨著 ServiceMesh,Serverless 等理念的興起有巧,我們的系統(tǒng)真的趨向于越來越分布式释漆,這樣雖然簡化了我們單個模塊的實現(xiàn),但整體來看剪决,也可能會導致我們的系統(tǒng)因為過于分布式而變得復雜灵汪,那么如何在這種復雜的環(huán)境下仍然讓我們有信心能保證系統(tǒng)能正常穩(wěn)定運行檀训,混沌工程可以算是一個很不錯的選擇。

現(xiàn)在市面上面享言,支持混沌工程的平臺已經(jīng)有很多了峻凫,但我這里仍然推薦 ChaosMesh,畢竟使用它能讓你極大提升你對系統(tǒng)的信心览露。

最后荧琼,歡迎來到復雜的分布式系統(tǒng)世界。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末差牛,一起剝皮案震驚了整個濱河市命锄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偏化,老刑警劉巖脐恩,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侦讨,居然都是意外死亡驶冒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門韵卤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骗污,“玉大人,你說我怎么就攤上這事沈条⌒璺蓿” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵蜡歹,是天一觀的道長屋厘。 經(jīng)常有香客問我,道長月而,這世上最難降的妖魔是什么擅这? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮景鼠,結(jié)果婚禮上仲翎,老公的妹妹穿的比我還像新娘。我一直安慰自己铛漓,他們只是感情好溯香,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浓恶,像睡著了一般玫坛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上包晰,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天湿镀,我揣著相機與錄音炕吸,去河邊找鬼。 笑死勉痴,一個胖子當著我的面吹牛赫模,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒸矛,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瀑罗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雏掠?” 一聲冷哼從身側(cè)響起斩祭,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乡话,沒想到半個月后摧玫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡绑青,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年席赂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片时迫。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谓晌,靈堂內(nèi)的尸體忽然破棺而出掠拳,到底是詐尸還是另有隱情,我是刑警寧澤纸肉,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布溺欧,位于F島的核電站,受9級特大地震影響柏肪,放射性物質(zhì)發(fā)生泄漏姐刁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一烦味、第九天 我趴在偏房一處隱蔽的房頂上張望聂使。 院中可真熱鬧,春花似錦谬俄、人聲如沸柏靶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屎蜓。三九已至,卻和暖如春钥勋,著一層夾襖步出監(jiān)牢的瞬間炬转,已是汗流浹背辆苔。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扼劈,地道東北人驻啤。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像测僵,于是被迫代替她去往敵國和親街佑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355