定義
混沌工程是一種可試驗(yàn)的掘托、基于系統(tǒng)的方法來處理大規(guī)模分布式系統(tǒng)中的混亂問題娜扇。通過不斷試驗(yàn)邑闺,了解系統(tǒng)的實(shí)際能承受的韌性邊界并建立信心,通過不同的試驗(yàn)方法和目的剂跟,觀察分布式系統(tǒng)的行為和反應(yīng)减途。一句話:以實(shí)驗(yàn)的方法盡早揭露系統(tǒng)弱點(diǎn)
混沌工程與傳統(tǒng)測(cè)試的區(qū)別
- 在測(cè)試中,進(jìn)行斷言:給定特定條件曹洽,系統(tǒng)將發(fā)出特定輸出鳍置。測(cè)試通常是二進(jìn)制態(tài)的,并確定屬性是真還是假送淆。嚴(yán)格地說税产,這不會(huì)產(chǎn)生關(guān)于系統(tǒng)的新知識(shí),它只是將效價(jià)分配給它的已知屬性偷崩。
- 實(shí)驗(yàn)產(chǎn)生新知識(shí)辟拷,并經(jīng)常提出新的探索途徑。我們認(rèn)為混沌工程是一種實(shí)驗(yàn)形式阐斜,可以產(chǎn)生關(guān)于系統(tǒng)的新知識(shí)衫冻。它不僅僅是一種測(cè)試已知屬性的方法,可以通過集成測(cè)試更輕松地進(jìn)行驗(yàn)證谒出。
故事
在給大家正式介紹之前隅俘,先給大家說個(gè)小故事,阿波羅13號(hào)在發(fā)射前進(jìn)行的一次測(cè)試中笤喳,2號(hào)氧氣罐的氧氣始終無法徹底排空为居。控制人員決定啟動(dòng)罐內(nèi)的加熱器杀狡,排出剩余氧氣蒙畴。這個(gè)操作需要接通65伏的電源,但氧氣罐內(nèi)的電路一開始的設(shè)計(jì)電壓是28伏呜象。在8小時(shí)的加熱后膳凝,靠近加熱器的導(dǎo)線溫度一度達(dá)到了538度,導(dǎo)線的絕緣層被破壞恭陡。在太空中鸠项,這段導(dǎo)線短路,點(diǎn)燃了絕緣層子姜,引發(fā)了爆炸。
軟件開發(fā)中的問題
在日常開發(fā)運(yùn)維工作中,如果你不能提早發(fā)現(xiàn)和解決問題哥捕,最后問題會(huì)在周末/半夜來“解決你”.
系統(tǒng)架構(gòu)的演進(jìn)
從系統(tǒng)架構(gòu)的本質(zhì)演進(jìn)中是由脆弱的系統(tǒng)牧抽,慢慢演進(jìn),逐步增強(qiáng)遥赚,最終變的越加智能化扬舒,成為一個(gè)反脆弱系統(tǒng)。
- 脆弱系統(tǒng):難以修改凫佛,許多阻止擁有無法更改的應(yīng)用程序讲坎,維護(hù)成本非常高,但是由于他們對(duì)業(yè)務(wù)至關(guān)重要愧薛,因此仍然運(yùn)行晨炕。
- 健壯系統(tǒng):可承受一定程度的壓力而不會(huì)失去其給您,但是如果壓力和變化繼續(xù)毫炉,則該系統(tǒng)可能會(huì)帶來損失瓮栗。
- 韌性系統(tǒng):在設(shè)計(jì)和實(shí)現(xiàn)時(shí)考慮到壓力和適應(yīng)性特征,從而應(yīng)對(duì)更大的壓力和變化瞄勾,并最大程度的提供價(jià)值费奸。
-
反脆弱系統(tǒng):是一個(gè)智能系統(tǒng),架構(gòu)復(fù)雜有難度进陡,但是一旦建立起來愿阐,降機(jī)遇變更來驅(qū)動(dòng)業(yè)務(wù),甚至能提供創(chuàng)新變更趾疚。
混沌過程的演進(jìn)
2010年 Netflix 內(nèi)部開發(fā)了 AWS 云上隨機(jī)終止 EC2 實(shí)例的混沌實(shí)驗(yàn)工具: Chaos Monkey
2011年 Netflix 釋出了其猴子軍團(tuán)工具集: Simian Army
2012年 Netflix 向社區(qū)開源由 Java 構(gòu)建 Simian Army缨历,其中包括 Chaos Monkey V1 版本
2014年 Netflix 開始正式公開招聘 Chaos Engineer
2014年 Netflix 提出了故障注入測(cè)試(FIT),利用微服務(wù)架構(gòu)的特性盗蟆,控制混沌實(shí)驗(yàn)的爆炸半徑
2015年 Netflix 釋出 Chaos Kong 戈二,模擬AWS區(qū)域(Region)中斷的場(chǎng)景
2015年 Netflix 和社區(qū)正式提出混沌工程的指導(dǎo)思想 – Principles of Chaos Engineering
2016年 Kolton Andrus(前 Netflix 和 Amazon Chaos Engineer )創(chuàng)立了 Gremlin ,正式將混沌實(shí)驗(yàn)工具商用化
2017年 Netflix 開源 Chaos Monkey 由 Golang 重構(gòu)的 V2 版本喳资,必須集成 CD 工具 Spinnaker 來使用
2017年 Netflix 釋出 ChAP (混沌實(shí)驗(yàn)自動(dòng)平臺(tái))觉吭,可視為應(yīng)用故障注入測(cè)試(FIT)的加強(qiáng)版
2017年 由Netflix 前混沌工程師撰寫的新書“混沌工程”在網(wǎng)上出版
2017年 Russell Miles 創(chuàng)立了 ChaosIQ 公司,并開源了 chaostoolkit 混沌實(shí)驗(yàn)框架
混沌工程的原則
建立穩(wěn)定狀態(tài)的假設(shè)
- 確定監(jiān)控指標(biāo)
- 假設(shè)注入事件仆邓,系統(tǒng)依然穩(wěn)定
在一個(gè)復(fù)雜系統(tǒng)里面鲜滩,我們有特別多的組件,有很多不同的輸入輸出节值,我們需要有一個(gè)通用的方式來區(qū)別系統(tǒng)哪些行為是可以接受的徙硅,而哪一些則是不合適的。我們可以認(rèn)為當(dāng)系統(tǒng)處于正常操作時(shí)候的狀態(tài)就是穩(wěn)定狀態(tài)搞疗。
多樣化現(xiàn)實(shí)世界事件
- 根據(jù)現(xiàn)實(shí)世界設(shè)定事件
- 注入事件是被認(rèn)為系統(tǒng)可以處理的事件
- 優(yōu)先注入那些頻繁發(fā)生且影響重大的事件
在生產(chǎn)環(huán)境運(yùn)行
- 混沌工程實(shí)驗(yàn)離生產(chǎn)越近越好
從功能性的故障測(cè)試角度來看嗓蘑,非生產(chǎn)環(huán)境去實(shí)施故障注入是可以滿足預(yù)期的,不過因?yàn)橄到y(tǒng)行為會(huì)根據(jù)環(huán)境和流量模式有所不同,為了保證系統(tǒng)執(zhí)行方式的真實(shí)性與當(dāng)前部署系統(tǒng)的相關(guān)性桩皿,推薦的實(shí)施方式還是在生產(chǎn)環(huán)境(仿真環(huán)境豌汇、沙箱環(huán)境都不是最好的選擇)
很多同學(xué)恐懼在生產(chǎn)環(huán)境執(zhí)行實(shí)驗(yàn),原因還是擔(dān)心故障影響不可控泄隔。實(shí)施實(shí)驗(yàn)只是手段拒贱,通過實(shí)驗(yàn)對(duì)系統(tǒng)建立信心是我們的目標(biāo)。關(guān)于如何減少實(shí)驗(yàn)帶來的影響佛嬉,這點(diǎn)在“最小化爆炸半徑”部分會(huì)有闡述逻澳。
并且混沌工程不是一開始就建議你在生產(chǎn)環(huán)境運(yùn)行,也是循序漸進(jìn)暖呕,從測(cè)試環(huán)境開始斜做,慢慢過渡的到sandbox,最后在生產(chǎn)環(huán)境運(yùn)行試驗(yàn)缰揪。
持續(xù)自動(dòng)化運(yùn)行實(shí)驗(yàn)
- 自動(dòng)執(zhí)行實(shí)驗(yàn)
- 自動(dòng)分析實(shí)驗(yàn)結(jié)果
- 自動(dòng)創(chuàng)建新的實(shí)驗(yàn)
實(shí)驗(yàn)的手動(dòng)運(yùn)行工作屬于勞動(dòng)力密集型任務(wù)陨享,因此難以長(zhǎng)久持續(xù)。建議采取自動(dòng)化實(shí)驗(yàn)及持續(xù)運(yùn)行方式钝腺∨坠茫混沌工程能夠?qū)⒆詣?dòng)化系統(tǒng)引入系統(tǒng)之內(nèi),從而促進(jìn)協(xié)調(diào)與分析工作的順利進(jìn)行艳狐。
最小化影響范圍
- 對(duì)線上業(yè)務(wù)影響最小范圍
- 先小范圍定硝,在不斷擴(kuò)大
- 避免在高風(fēng)險(xiǎn)時(shí)間段運(yùn)行
最小化爆炸半徑,盡量減少對(duì)用戶的影響毫目,最好能控制到用戶基本蔬啡,或者請(qǐng)求基本,這樣對(duì)線上基本就沒有什么損失镀虐,高層的接受度也會(huì)很高箱蟆,減少故障對(duì)產(chǎn)線業(yè)務(wù)的影響。
混沌工程實(shí)驗(yàn)步驟
混沌工程的成熟度模型
混沌工程的接納指數(shù)
混沌工程的價(jià)值
1.架構(gòu)師對(duì)當(dāng)前設(shè)計(jì)的架構(gòu)刮便,可以通過混沌工程進(jìn)行驗(yàn)證
2.開發(fā)和運(yùn)維的可以用混沌工程來提高自己對(duì)線上Case處理的演練空猜,提升經(jīng)驗(yàn)
3.測(cè)試可以在利用混沌工程提早暴露一些線上的問題,降低故障復(fù)發(fā)率恨旱,轉(zhuǎn)化被動(dòng)為主動(dòng)
4.UI可以在出現(xiàn)這些問題時(shí)辈毯,界面的反饋,產(chǎn)品不顯示搜贤,產(chǎn)品對(duì)用戶的體驗(yàn)度是怎么樣的谆沃,可以接受與否等
混沌工程的回報(bào)率
引用自Netflix
過去一年中,混沌工程提前發(fā)現(xiàn)了2次大故障和8次小故障仪芒,避免了整個(gè)組織大約70萬美金的損失唁影「荩混沌工程團(tuán)隊(duì),總共3個(gè)成員据沈,薪水支出15萬美金/人啃炸。開展混沌工程實(shí)驗(yàn),本身需要1萬美金的成本卓舵。請(qǐng)問,投資回報(bào)率是多少膀钠?