“混沌工程實驗性價比太低了裂逐。測試、研發(fā)和運維三個部門都投入了大量人力物力泣栈,在準生產(chǎn)環(huán)境做了不少故障注入實驗卜高。但發(fā)現(xiàn)的問題還是比較少∧掀”在一次混沌工程實踐回顧會上掺涛,一位測試人員如是說。
這位測試人員疼进,來自一家國內(nèi)領先的股份制商業(yè)銀行薪缆。而我正在為這家銀行的運維團隊,輔導他們的混沌工程實踐伞广。
近十幾年來拣帽,隨著企業(yè)業(yè)務不斷微服務化,并遷移到復雜分布式的云生產(chǎn)環(huán)境嚼锄,云上各個微服務業(yè)務系統(tǒng)之間相互訪問的穩(wěn)定性减拭,以及與所依賴的第三方系統(tǒng)之間相互訪問的穩(wěn)定性,都會受到錯綜復雜的云生產(chǎn)環(huán)境的未知故障的影響区丑,而損害業(yè)務連續(xù)性拧粪。混沌工程就是業(yè)界在應對上述問題的過程中孕育而生的良好實踐刊苍。通過在測試環(huán)境和生產(chǎn)環(huán)境上既们,注入經(jīng)過精心設計并控制好爆炸半徑的故障,進行故障注入實驗正什,就可以觀察和學習復雜分布式系統(tǒng)的運行模式和失效模式啥纸,從而提升團隊的系統(tǒng)穩(wěn)定性設計,讓團隊能夠快速應對業(yè)務系統(tǒng)在云環(huán)境上的未知故障婴氮。
看到其他銀行已經(jīng)率先實踐了混沌工程斯棒,這家銀行的運維部門也按耐不住盾致,早在一年前就開始了混沌工程實踐之旅。
我們知道荣暮,要想保持業(yè)務系統(tǒng)在云環(huán)境上運行的穩(wěn)定性庭惜,離不開包括業(yè)務、研發(fā)穗酥、測試和運維部門的密切協(xié)作护赊。這家銀行的這4個部門的協(xié)作情況是怎樣的呢?
最先響應運維部門實踐混沌工程召喚的砾跃,是測試部門骏啰。測試部門認為混沌工程的故障注入實驗,能豐富他們的壓力測試和探索性測試的場景抽高,從而發(fā)現(xiàn)更多軟件缺陷判耕。
然而相比之下,研發(fā)和業(yè)務部門的一線人員對此的參與度卻不夠高翘骂。他們認為壁熄,混沌工程的故障注入實驗,其實就是另一種測試而已碳竟。
確實草丧,測試部門就是把混沌工程故障注入實驗,當作探索性測試來做的瞭亮》椒拢“混沌工程實驗固棚,類似于探索性測試统翩。實驗本身沒有明確的輸入和預期的結果,而是通過對系統(tǒng)和服務的干預此洲,來觀察系統(tǒng)的反應厂汗。”測試人員在測試總結中這樣寫道呜师。
缺乏明確的穩(wěn)態(tài)行為假說
由于測試人員使用探索性測試的方法娶桦,來實踐混沌工程故障注入實驗,所以在實驗結果報告中汁汗,找不到“系統(tǒng)穩(wěn)態(tài)行為假說”的字眼衷畦。只是在“風險問題”的以下描述中,隱約看到穩(wěn)態(tài)行為假說的影子:“預期主節(jié)點的docker服務關閉后知牌,kubelet/api/etcd/controllers等pod會失效祈争,之后這些核心服務的進程會重啟,能繼續(xù)提供服務”角寸。
隱含的穩(wěn)態(tài)行為假說沒有反映用戶價值
從上面的描述能看出菩混,這個混沌工程實驗的穩(wěn)態(tài)行為假說忿墅,并不是沒有,而是隱含存在的沮峡,即“能繼續(xù)提供服務”疚脐。那如何才算“能繼續(xù)提供服務”呢?這一點可以從測試方案的監(jiān)控方式中邢疙,看出一點線索棍弄。即對于所有實驗,無論注入的故障是什么疟游,測試人員只關注3類指標:
- 系統(tǒng)業(yè)務指標:如系統(tǒng)業(yè)務交易的錯誤率
- 系統(tǒng)性能指標:如系統(tǒng)業(yè)務交易的TPS(每秒事務處理量)和響應時長的變化趨勢
- 系統(tǒng)資源指標:如系統(tǒng)的CPU照卦、內(nèi)存、磁盤IO和網(wǎng)絡資源指標的變化趨勢
看到這3類指標乡摹,我產(chǎn)生了一個疑問:“用戶真的在乎業(yè)務交易錯誤率和TPS變化趨勢嗎役耕?”我相信,用戶會更在乎自己下的訂單聪廉,是否能在3秒內(nèi)成功處理瞬痘。這一點所有人都能很好理解。那未能反映用戶價值的穩(wěn)態(tài)行為假說板熊,會導致什么后果呢框全?或許這種充滿技術細節(jié)的穩(wěn)態(tài)行為假說,不便于業(yè)務人員和領導直觀感知其業(yè)務影響干签,吸引不了他們的注意津辩,從而喪失了獲得他們支持的機會,并弱化了實驗的價值容劳。
隱含的穩(wěn)態(tài)行為假說不夠量化
再看上面這個通過觀察TPS變化趨勢來判斷是否“能繼續(xù)提供服務”的例子喘沿。如果這個實驗是由測試人員手工執(zhí)行的,憑借豐富的經(jīng)驗竭贩,測試人員是能判斷系統(tǒng)是否“能繼續(xù)提供服務”的蚜印。但如果將這個實驗自動化,用工具在晚上自動執(zhí)行實驗留量,那么工具該如何界定系統(tǒng)是否“能繼續(xù)提供服務”呢窄赋?所以要想實現(xiàn)自動化,必須要把穩(wěn)態(tài)行為的假說進行量化楼熄,以便工具自動執(zhí)行實驗忆绰。
良好穩(wěn)態(tài)行為假說示例
這里試著給出一個能反映用戶價值,且有量化指標的穩(wěn)態(tài)行為假說的示例:
“即使在實例失效的條件下可岂,系統(tǒng)仍然能在3秒之內(nèi)错敢,完成已受理的用戶的交易,否則也能在5秒之內(nèi)提示用戶業(yè)務暫時不可用青柄》フ”
這個穩(wěn)態(tài)行為假說预侯,不僅體現(xiàn)了成功場景,也體現(xiàn)了失敗場景峰锁。
良好穩(wěn)態(tài)行為假說能節(jié)省實驗成本
如何設計一個能節(jié)省實驗成本的穩(wěn)態(tài)行為假說呢萎馅?讓我們看看發(fā)生在這家銀行測試人員身上的故事。
這些測試人員正在使用一款開源工具虹蒋,來進行混沌工程故障注入實驗糜芳。由于這款工具,提供了5種可供注入的原子故障魄衅,于是測試人員也就設計了5個實驗峭竣。如果用上述示例的寫法,來編寫穩(wěn)態(tài)行為假說的話晃虫,會是這個樣子:
- 實驗1的穩(wěn)態(tài)行為假說:即使在實例中止的條件下皆撩,系統(tǒng)仍然能在3秒之內(nèi),完成已受理的用戶的交易哲银,否則也能在5秒之內(nèi)提示用戶業(yè)務暫時不可用扛吞。
- 實驗2的穩(wěn)態(tài)行為假說:即使在實例CPU爆滿的條件下,系統(tǒng)仍然能在3秒之內(nèi)荆责,完成已受理的用戶的交易滥比,否則也能在5秒之內(nèi)提示用戶業(yè)務暫時不可用。
- 實驗3的穩(wěn)態(tài)行為假說:即使在實例內(nèi)存爆滿的條件下做院,系統(tǒng)仍然能在3秒之內(nèi)盲泛,完成已受理的用戶的交易,否則也能在5秒之內(nèi)提示用戶業(yè)務暫時不可用键耕。
- 實驗4的穩(wěn)態(tài)行為假說:即使在實例磁盤爆滿的條件下寺滚,系統(tǒng)仍然能在3秒之內(nèi),完成已受理的用戶的交易郁竟,否則也能在5秒之內(nèi)提示用戶業(yè)務暫時不可用玛迄。
- 實驗4的穩(wěn)態(tài)行為假說:即使在關閉實例網(wǎng)絡的條件下由境,系統(tǒng)仍然能在3秒之內(nèi)棚亩,完成已受理的用戶的交易,否則也能在5秒之內(nèi)提示用戶業(yè)務暫時不可用虏杰。
如果手工執(zhí)行每個實驗平均花30分鐘讥蟆,那么執(zhí)行這5個實驗,要花150分鐘纺阔。
等一下瘸彤!我們是銀行的測試人員,不是開源混沌工程工具的測試人員笛钝!這5個原子故障好比病毒质况,它們所導致的癥狀都是同一個——實例失效愕宋。而對于銀行的測試人員,只要從上述5個故障中任選一個注入结榄,就能達成讓實例失效的目的中贝。畢竟測試人員只須關注業(yè)務系統(tǒng)在實例失效后,是否能繼續(xù)提供服務臼朗。換句話說邻寿,這5個原子故障,同屬一個等價類视哑。對于等價類绣否,我們只要注入一個原子故障就夠了。如果一定要全面注入這5個原子故障挡毅,那么可以在以后的各輪回歸實驗中蒜撮,每輪實驗依次輪流選擇一種不同的原子故障注入即可。這樣對于“實例失效”的實驗跪呈,我們就能節(jié)省80%的實驗成本淀弹。這下你就知道上面的良好穩(wěn)態(tài)行為假說示例,為何要寫“癥狀”了——“即使在實例失效的條件下”庆械。這也在某種程度上薇溃,揭示了文章一開頭測試人員所抱怨的混沌工程實驗“性價比太低”的原因。
這個故事給我們的啟發(fā)是缭乘,如果針對“癥狀”而不是“病毒”來設計系統(tǒng)穩(wěn)態(tài)行為假說沐序,就能幫助我們識別等價類,從而只選擇少量的“病毒”注入堕绩,達成同樣“癥狀”的效果策幼,進而降低實驗成本。
總結
編寫反映用戶價值奴紧、便于量化且針對“癥狀”的系統(tǒng)穩(wěn)態(tài)行為假說特姐,能讓混沌工程實驗的價值更容易讓業(yè)務人員和領導理解,從而獲得他們的支持黍氮,也能更有利于自動化唐含,并能通過等價類劃分,來降低實驗成本沫浆,進而達成降本增效的目的捷枯。
作者簡介
最近10年,專注輔導國內(nèi)近20家大中型企業(yè)研發(fā)團隊的工程生產(chǎn)力賦能专执。曾在社區(qū)主持過幾十次編程道場淮捆,人稱“道長”。著《馴服爛代碼》,譯《發(fā)布!》第2版攀痊,合譯《混沌工程》桐腌。ThoughtWorks中國區(qū)Lead Consultant,工程生產(chǎn)力賦能教練苟径,伍斌哩掺。歡迎加我個人微信wubinben28并備注chaos,交流混沌工程賦能實踐涩笤。