本文已存放在 https://github.com/wizardbyron/principlesofchaos_zh-cn 上莱坎,歡迎來 PR
混沌工程是在分布式系統(tǒng)上進行實驗的學(xué)科, 目的是建立對系統(tǒng)抵御生產(chǎn)環(huán)境中失控條件的能力以及信心队询。
大規(guī)模分布式軟件系統(tǒng)的發(fā)展正在改變軟件工程。作為一個行業(yè)涛碑,我們很快采用了提高開發(fā)靈活性和部署速度的實踐朴爬。緊跟著這些好處的一個緊迫問題是:我們對投入生產(chǎn)的復(fù)雜系統(tǒng)中有多少信心丰歌?
即使分布式系統(tǒng)中的所有單個服務(wù)都正常運行, 這些服務(wù)之間的交互也會導(dǎo)致不可預(yù)知的結(jié)果荒澡。 這些不可預(yù)知的結(jié)果, 由影響生產(chǎn)環(huán)境的罕見但破壞性的真實事件復(fù)合而成报辱,令這些分布式系統(tǒng)存在內(nèi)在的混沌。
我們需要在異常行為出現(xiàn)之前单山,在整個系統(tǒng)的范圍內(nèi)找出這些弱點碍现。 系統(tǒng)弱點包括以下形式: 當(dāng)服務(wù)不可用時的不正確回退設(shè)置;不當(dāng)?shù)某瑫r設(shè)置導(dǎo)致的重試風(fēng)暴;由于下游依賴項流量過載導(dǎo)致的服務(wù)中斷;單點故障時的級聯(lián)失敗等。我們必須主動的發(fā)現(xiàn)這些重要的弱點米奸,在這些弱點通過生產(chǎn)環(huán)境暴露給我們的客戶之前昼接。我們需要一種方法來管理這些系統(tǒng)固有的混沌, 通過增加的靈活性和速率以提升我們對生產(chǎn)環(huán)境部署的信心,? 盡管系統(tǒng)的復(fù)雜性是由這些部署所導(dǎo)致的。
基于經(jīng)驗和系統(tǒng)的方法解決了分布式系統(tǒng)在規(guī)模增大時引發(fā)的混亂問題, 并以此建立了對這些系統(tǒng)抵御現(xiàn)實條件的能力的信心悴晰。 我們通過在受控實驗中觀察分布式系統(tǒng)的行為來了解它的特性慢睡。 我們稱之為混沌工程。
混沌工程實踐
為了具體地解決分布式系統(tǒng)在規(guī)模上的不確定性铡溪,可以把混沌工程看作是為了揭示系統(tǒng)弱點而進行的實驗一睁。這些實驗遵循四個步驟:
首先,用系統(tǒng)在正常行為下的一些可測量的輸出來定義“穩(wěn)態(tài)”佃却。
假設(shè)這個穩(wěn)定狀態(tài)在控制組和實驗組都會繼續(xù)存在。
引入反映真實世界事件的變量窘俺,如服務(wù)器崩潰饲帅、硬盤故障复凳、網(wǎng)絡(luò)連接斷開等。
試圖通過假設(shè)控制組和實驗組之間的穩(wěn)態(tài)差異來反駁這個假設(shè)灶泵。
破壞穩(wěn)態(tài)的難度越大育八,我們對系統(tǒng)行為的信心就越強。如果發(fā)現(xiàn)了一個弱點赦邻,那么我們就有了一個改進目標髓棋。避免在系統(tǒng)規(guī)模化之后被放大惶洲。
高級原則
以下原則描述了應(yīng)用混沌工程的理想方式按声,這些原則基于上述實驗過程。 對這些原則的匹配程度能夠增強我們在大規(guī)模分布式系統(tǒng)的信心恬吕。
建立一個圍繞穩(wěn)定狀態(tài)行為的假說
要關(guān)注系統(tǒng)的可測量輸出, 而不是系統(tǒng)的屬性签则。 對這些輸出在短時間內(nèi)的度量構(gòu)成了系統(tǒng)穩(wěn)定狀態(tài)的一個代理。 整個系統(tǒng)的吞吐量铐料、錯誤率渐裂、延遲百分點等都可能是表示穩(wěn)態(tài)行為的指標。 通過在實驗中的系統(tǒng)性行為模式上的關(guān)注, 混沌工程驗證了系統(tǒng)是否正常工作, 而不是試圖驗證它是如何工作的钠惩。
多樣化真實世界的事件
混沌變量反映了現(xiàn)實世界中的事件柒凉。 我們可以通過潛在影響或估計頻率排定這些事件的優(yōu)先級。 考慮與硬件故障類似的事件, 如服務(wù)器宕機篓跛、軟件故障 (如錯誤響應(yīng)) 和非故障事件 (如流量激增或縮放事件)膝捞。 任何能夠破壞穩(wěn)態(tài)的事件都是混沌實驗中的一個潛在變量。
在生產(chǎn)環(huán)境中運行實驗
系統(tǒng)的行為會依據(jù)環(huán)境和流量模式都會有所不同举塔。 由于資源使用率變化的隨時可能發(fā)生, 因此通過采集實際流量是捕獲請求路徑的唯一可靠方法绑警。 為了保證系統(tǒng)執(zhí)行方式的真實性與當(dāng)前部署系統(tǒng)的相關(guān)性, 混沌工程強烈推薦直接采用生產(chǎn)環(huán)境流量進行實驗。
持續(xù)自動化運行實驗
手動運行實驗是勞動密集型的, 最終是不可持續(xù)的央渣,所以我們要把實驗自動化并持續(xù)運行计盒。 混沌工程要在系統(tǒng)中構(gòu)建自動化的編排和分析。
最小化爆炸半徑
在生產(chǎn)中進行試驗可能會造成不必要的客戶投訴芽丹。雖然對一些短期負面影響必須有一個補償, 但混沌工程師的責(zé)任和義務(wù)是確保這些后續(xù)影響最小化且被考慮到北启。
混沌工程是一個強大的實踐, 它已經(jīng)在世界上一些規(guī)模最大的業(yè)務(wù)系統(tǒng)上改變了軟件是如何設(shè)計和工程化的。 相較于其他方法解決了速度和靈活性, 混沌工程專門處理這些分布式系統(tǒng)中的系統(tǒng)不確定性拔第。 混沌工程的原則為我們大規(guī)模的創(chuàng)新和給予客戶他們應(yīng)得的高質(zhì)量的體驗提供了信心咕村。
歡迎加入混沌社區(qū)的 Google 討論組和我們一起討論這些原則的應(yīng)用。
本文翻譯自 http://principlesofchaos.org/