在微服務(wù)從業(yè)者峰會(huì)上,Kolton Andrus在演講中指出,故障測試是運(yùn)行微服務(wù)的一個(gè)關(guān)鍵部分。你應(yīng)該確定微服務(wù)的行為同預(yù)期一樣,以避免停機(jī)。
前Netflix軟件工程師Andrus將故障測試比作疫苗,為了產(chǎn)生免疫力,向體內(nèi)注射少量有害的東西。在Andrus看來,這非常符合微服務(wù)領(lǐng)域。為了查看微服務(wù)的行為,我們向其中注入少量對(duì)微服務(wù)有害的東西,然后設(shè)法建立免疫。
故障測試的缺點(diǎn)是它可能造成影響。它會(huì)帶來破壞或者造成一些客戶影響,但是,如果最終的結(jié)果是最壞的事情沒有那么壞,而最好的事情相當(dāng)好,比如,阻止了停機(jī),那么他認(rèn)為,這種缺點(diǎn)是可控的。
做故障測試,Andrus更喜歡結(jié)合故障場景,考慮什么會(huì)出錯(cuò),系統(tǒng)怎么會(huì)出錯(cuò)。他認(rèn)為,提出類似“我們擔(dān)心什么?”或“會(huì)出什么錯(cuò)?”這樣的問題,多少會(huì)有助于更好地做準(zhǔn)備??紤]故障發(fā)生的可能性,就可以發(fā)現(xiàn)基礎(chǔ)設(shè)施中應(yīng)該投入時(shí)間的常見事件。不過,他指出,我們不可能什么都準(zhǔn)備好,故障總會(huì)出現(xiàn),我們無法看到它們到來,但是,我們要相信,做好準(zhǔn)備會(huì)讓我們更有能力緩解問題。
另一個(gè)Andrus認(rèn)為有助于優(yōu)先級(jí)排序和風(fēng)險(xiǎn)評(píng)估的問題是“出錯(cuò)成本是什么?”。然后,可以執(zhí)行一個(gè)成本-收益分析,不僅要考慮會(huì)出什么錯(cuò),而且還要考慮什么可能出錯(cuò),這有助于決定在哪里投入時(shí)間和金錢以獲得最好的回報(bào)。
Andrus還強(qiáng)調(diào)了在生產(chǎn)環(huán)境中進(jìn)行測試的重要性。如果只在測試環(huán)境中測試,那么生產(chǎn)環(huán)境的配置、網(wǎng)絡(luò)和硬件都沒有測試過,他援引了Amazon Web Services(AWS)著名工程師James Hamilton的一段話:
那些不愿意在生產(chǎn)環(huán)境中進(jìn)行測試的人對(duì)他們的服務(wù)能夠在故障情況下繼續(xù)運(yùn)行沒有信心。不做生產(chǎn)環(huán)境測試,會(huì)在需要恢復(fù)的時(shí)候發(fā)現(xiàn)恢復(fù)失效了。
如果你做了大量的工作,并創(chuàng)建了緩解問題的方案,但未能在生產(chǎn)環(huán)境中進(jìn)行測試,那么你稍后可能會(huì)發(fā)現(xiàn)它們在生產(chǎn)環(huán)境中無效或者導(dǎo)致故障更糟糕,那可不是一個(gè)讓人身在其中倍感愉快的境地。
查看英文原文:Failure Testing of Microservices