故障必然發(fā)生
2019年3月3號阿里云宕機(jī)持續(xù)3個多小時竟闪,華北地區(qū)很多公司的網(wǎng)站,APP溅呢, 內(nèi)部系統(tǒng)紛紛癱瘓澡屡。消息立馬上了社交的頭條,大家都調(diào)侃“一年一掛藕届,今年比往年早一些”挪蹭。
阿里這樣的大公司亭饵,技術(shù)實力是毋庸置疑的休偶,也不可避免的出現(xiàn)大大小小的各種故障。我想在互聯(lián)網(wǎng)行業(yè)的打工人都感同身受吧辜羊,生產(chǎn)環(huán)境的故障就沒斷過踏兜,總會在某些特殊的時刻出現(xiàn),給你一個大大的“驚喜”八秃。無論是傳統(tǒng)的軟件時代碱妆,還是現(xiàn)在的互聯(lián)網(wǎng),云時代昔驱,隨著時間的推移疹尾,軟件硬件的持續(xù)運行, 終究會在某個時間點被終結(jié)骤肛,走向失敗纳本。
那么,我們要做什么呢腋颠?面對不同的級別的故障或者問題繁成,我們要用合理的成本,有效的方法保障業(yè)務(wù)的連續(xù)性淑玫,持續(xù)性巾腕。這個過程中,面向失敗的設(shè)計特別的重要絮蒿,業(yè)務(wù)的持續(xù)性尊搬,取決于我們對異常場景的投入了多少精力。
失敗場景
這里例舉我遇到的一些常見的失敗場景
硬件問題
硬件有固有的生命周期土涝,它隨著時間推移一定會老化佛寿,而且會在某個不確定的時間點損壞。還有可能受到外力的因素導(dǎo)致?lián)p壞回铛,譬如火災(zāi)狗准,地震等等克锣。
我自己每天巡檢系統(tǒng),有時候就會遇到某一個節(jié)點的異常(盡量排除了系統(tǒng)異常軟件異常的情況下)腔长,采取換機(jī)器的方式來解決袭祟。
代碼bug
這個就更常見了, 即使是非常優(yōu)秀的程序員寫出來的代碼捞附,經(jīng)過嚴(yán)格的測試巾乳,上線后依然可能存在bug。我不優(yōu)秀鸟召,所以我每天背著沉重的電腦來回跑胆绊,深怕突如其來的bug,哈哈欧募。
配置變更錯誤
現(xiàn)在都流行分布式的統(tǒng)一配置中心進(jìn)行靈活的配置系統(tǒng)的一些變量压状,方便是挺方便的。但人為的配置難免會出現(xiàn)疏忽大意跟继,考慮不周(這個也是血淋淋的教訓(xùn)种冬,線上出現(xiàn)過幾次因為統(tǒng)一配置錯誤出現(xiàn)故障)。另外由于所有的項目都依賴于統(tǒng)一配置系統(tǒng)舔糖,如果統(tǒng)一配置系統(tǒng)出現(xiàn)故障娱两,也會導(dǎo)致大量的系統(tǒng)異常。
洪峰流量
對于突發(fā)流量導(dǎo)致系統(tǒng)異常也是屢見不鮮金吗,譬如某巨星發(fā)布了離婚的消息十兢,如果不提前告訴新浪微博,那么微博隨時可能會宕機(jī)啦摇庙。
依賴服務(wù)問題
依賴的服務(wù)肯定不會100%可用旱物,它們隨時會超時,會失敗跟匆。當(dāng)依賴的服務(wù)超時了异袄,你沒有很好的處理,那么可能會導(dǎo)致你自己的系統(tǒng)不可用玛臂。在分布式的情況下烤蜕,可能會將異常輻射出去,最終導(dǎo)致大量的系統(tǒng)不可用迹冤。
依賴庫問題
我們系統(tǒng)依賴的各種庫讽营,用到的各種組件,封裝好的工具泡徙,使用的時候很爽橱鹏,功能完成的很快。但它們對我們來說是黑盒,你不了解它們莉兰,會存在哪些風(fēng)險挑围,存在哪些漏洞 (譬如fastjson暴露出來的漏洞好幾個),即使是公司內(nèi)部的組件也一樣可能存在bug糖荒,一句話杉辙,就是不能完全信任它們,尤其是非常重要的業(yè)務(wù)功能捶朵,更要當(dāng)心蜘矢。
系統(tǒng)的惡化
春節(jié)前,我還跟同事開玩笑综看,要在封網(wǎng)前把各個系統(tǒng)都重啟一下品腹,防止出紕漏。為啥呢红碑?隨著時間推移原本工作的很好的程序可能不能再正常工作舞吭。譬如:緩存的數(shù)據(jù)逐漸增大空間不足了,代碼哪里寫的有問題內(nèi)存泄露了等等句喷。
后續(xù)再介紹避免單點故障镣典,異地多活架構(gòu),依賴調(diào)用的自我保護(hù)唾琼,精細(xì)化監(jiān)控體系,故障與攻防演練等等澎剥。