“鈴鈴鈴……”辦公桌上的on-call電話竟然響了。坐在空蕩蕩的辦公室里值夜班的我芥被,心里咯噔一下欧宜。我看了看表,凌晨2點(diǎn)多拴魄。揉揉睡眼冗茸,強(qiáng)打精神,我接通了電話:“Hello……”
這是2005年12月的一天匹中,當(dāng)時(shí)我是一家通信設(shè)備制造公司的開(kāi)發(fā)人員夏漱,負(fù)責(zé)7x24小時(shí)接聽(tīng)來(lái)自全球的技術(shù)支持電話,解決關(guān)于VoIP網(wǎng)絡(luò)管理系統(tǒng)的線上問(wèn)題顶捷。
為了方便使用公司網(wǎng)絡(luò)來(lái)解決問(wèn)題挂绰,那些輪流值夜班的同事經(jīng)常會(huì)像捧著“燙手山芋”那樣,拿著那部on-call電話服赎,在辦公室過(guò)夜葵蒂。
所幸那段日子只持續(xù)了1年,之后我就轉(zhuǎn)到其他團(tuán)隊(duì)去了重虑。但想到在那期間on-call電話的“午夜兇鈴”践付,即使是14年后的今天,我依然心有余悸缺厉。我常想永高,有沒(méi)有辦法可以讓on-call的開(kāi)發(fā)人員睡個(gè)好覺(jué)呢隧土?
2014年12月,我加入了ThoughtWorks公司乏梁。那時(shí)次洼,DevOps開(kāi)始在國(guó)內(nèi)變得火熱起來(lái)。一次遇骑,我聽(tīng)到公司里的一位同事在聊天時(shí)說(shuō):“要想做好DevOps卖毁,一定要讀《發(fā)布!》落萎『ダ玻”這是我第一次聽(tīng)說(shuō)這本書(shū)。
大概過(guò)了兩年练链,我在《持續(xù)交付》一書(shū)的合著者Jez Humble寫(xiě)的有關(guān)持續(xù)交付的材料中翔脱,再次看到《發(fā)布!》的身影媒鼓。這讓我開(kāi)始關(guān)注這本書(shū)届吁。
第1版第5章的一段話吸引了我:“這八個(gè)健康的模式……會(huì)幫助你在軟件發(fā)布之后,晚上可以睡個(gè)好覺(jué)绿鸣【毋澹”
2018年1月,第2版英文版出版潮模。
2018年3月亮蛔,通過(guò)一個(gè)偶然的機(jī)會(huì),我得知圖靈公司在為第2版尋找譯者擎厢,于是毫不猶豫地應(yīng)征了究流。
2018年7月6日,我在北京參加ArchSummit全球架構(gòu)師峰會(huì)动遭。當(dāng)時(shí)美國(guó)東北大學(xué)西雅圖分校計(jì)算機(jī)系主任Ian Gorton講解了可擴(kuò)展的軟件系統(tǒng)和架構(gòu)的模式芬探,他在幻燈片中插入了第1版英文版封面±宓耄“第2版都出了半年多了偷仿,系主任先生該更新PPT了∶喙溃”我望著手邊的譯稿炎疆,心里說(shuō)。
與第1版相比国裳,第2版有何不同呢形入?
80%的內(nèi)容是新的。
第1版與第2版均包含四個(gè)部分缝左。第2版的第一部分仍然討論實(shí)現(xiàn)分布式系統(tǒng)穩(wěn)定性的方法亿遂,涉及穩(wěn)定性的模式和反模式浓若。對(duì)于后面三部分的內(nèi)容,第2版分別用“為生產(chǎn)環(huán)境而設(shè)計(jì)”“將系統(tǒng)交付”“解決系統(tǒng)性問(wèn)題”替代了第1版的“容量”“一般設(shè)計(jì)問(wèn)題”“運(yùn)營(yíng)”蛇数。
第2版新增的主要內(nèi)容包括以下幾個(gè)方面挪钓。
- “一窩蜂”和“做出誤判的機(jī)器”這兩個(gè)穩(wěn)定性反模式。
- “任其崩潰并替換”“卸下負(fù)載”“背壓機(jī)制”和“調(diào)速器”等穩(wěn)定性模式耳舅。
- 如何對(duì)部署進(jìn)行設(shè)計(jì)碌上。
- 如何處理軟件部署版本的問(wèn)題。
- 如何實(shí)踐混沌工程浦徊。
書(shū)中介紹了如何構(gòu)建高可用性分布式系統(tǒng)馏予,即使系統(tǒng)在發(fā)布后出現(xiàn)了問(wèn)題,開(kāi)發(fā)人員也能睡個(gè)好覺(jué)盔性,不會(huì)被深夜on-call電話叫醒霞丧。
為何有的分布式系統(tǒng)在上線后,會(huì)頻繁出現(xiàn)故障冕香,導(dǎo)致開(kāi)發(fā)人員夜不能寐蛹尝?看看某大型云平臺(tái)故障說(shuō)明中的這樣一段話:“對(duì)于這次故障,沒(méi)有借口悉尾,我們不能也不該出現(xiàn)這樣的失誤突那!”但事實(shí)證明,“不能也不該”出現(xiàn)的失誤焕襟,最終還是出現(xiàn)了陨收。為什么呢饭豹?因?yàn)樗麄冋J(rèn)為已經(jīng)在測(cè)試環(huán)境中鸵赖,驗(yàn)證了各種故障的應(yīng)對(duì)措施,所以他們不承認(rèn)系統(tǒng)上線后會(huì)出現(xiàn)故障拄衰。但實(shí)際情況如何呢它褪?他們會(huì)假設(shè)生產(chǎn)環(huán)境處于產(chǎn)品運(yùn)行最理想的狀態(tài),且用戶的行為是理智翘悉、可預(yù)見(jiàn)的茫打。于是,他們便在測(cè)試環(huán)境中模擬理想場(chǎng)景妖混,完成“終極”測(cè)試老赤。他們只關(guān)注如何通過(guò)測(cè)試人員所編寫(xiě)的測(cè)試用例,認(rèn)為只要通過(guò)了測(cè)試用例制市,便不會(huì)出現(xiàn)各類故障抬旺。但是,這是一種烏托邦式的觀點(diǎn)祥楣,而且所謂的測(cè)試用例往往只覆蓋了實(shí)際生產(chǎn)環(huán)境和用戶使用場(chǎng)景中很小的范圍开财。這樣一來(lái)汉柒,當(dāng)分布式系統(tǒng)在復(fù)雜殘酷的真實(shí)生產(chǎn)環(huán)境中發(fā)生故障后,很難控制故障范圍并進(jìn)行自我修復(fù)责鳍,造成系統(tǒng)出現(xiàn)很小的“裂紋”。之后历葛,“裂紋”逐漸蔓延,直至把整個(gè)系統(tǒng)拖垮恤溶。
如果你承認(rèn)軟件系統(tǒng)的失效不可避免,并且認(rèn)為工作的重點(diǎn)應(yīng)該是“當(dāng)系統(tǒng)失效時(shí)宏娄,該如何提升系統(tǒng)的生存能力”(換句話說(shuō)问裕,當(dāng)系統(tǒng)出現(xiàn)問(wèn)題時(shí),依然能穩(wěn)定運(yùn)行)孵坚,那么你需要仔細(xì)閱讀本書(shū),找到適合自己的答案巍杈。
吾真本
2019年11月26日于北京