互聯(lián)網(wǎng)系統(tǒng)穩(wěn)定性關(guān)注的領(lǐng)域是故障管理領(lǐng)域。故障,通常意義就是系統(tǒng)運(yùn)行行為和預(yù)期不一致,并且造成了實(shí)際損失。思考一下,雙十一頁面白屏,外賣下單的時(shí)候訂單始終提交不了, 這些在系統(tǒng)背后都對應(yīng)著一些列錯(cuò)誤,例如數(shù)據(jù)庫宕機(jī),應(yīng)用服務(wù)器OOM,I/O阻塞等等。
認(rèn)真的來看,故障管理領(lǐng)域我們可以分為下面的子領(lǐng)域。
【故障防范】- 防患于未然
一般而言,在系統(tǒng)規(guī)模比較小的時(shí)候,我們通過規(guī)范操作,標(biāo)準(zhǔn)化運(yùn)營維護(hù)行為就可以避免大部分故障。例如,CI/CD的落地,數(shù)據(jù)庫/緩存等規(guī)范化使用,應(yīng)用服務(wù)防御性設(shè)計(jì)等, 這些都可以避免相當(dāng)一部分的故障發(fā)生。?
隨著系統(tǒng)規(guī)模增長,以APPID論,成千上萬的APPID出現(xiàn)后,一次業(yè)務(wù)調(diào)用的鏈條開始設(shè)計(jì)到十幾個(gè)服務(wù)之后,系統(tǒng)復(fù)雜度急劇上升。 這時(shí)候,就需要通過演練進(jìn)行故障的防范。 Netflix的Chaos Engeering就是非常著名的演練工程。隨機(jī)混亂攻擊性測試,讓服務(wù)持有方不得不在防御性設(shè)計(jì),系統(tǒng)自愈能力上下功夫,以提高服務(wù)的可用性級別,進(jìn)而增強(qiáng)整個(gè)系統(tǒng)的魯棒性。
【故障感知】- 上天入地的監(jiān)控系統(tǒng)
Google為整個(gè)互聯(lián)網(wǎng)世界貢獻(xiàn)了無數(shù)理論瑰寶,其中Dapper指導(dǎo)了大量分布式監(jiān)控框架的實(shí)現(xiàn),例如Pinpoint,Zipkin,點(diǎn)評老吳的CAT, 我們也有etrace。萬變不離其中,這是應(yīng)用層上trace系統(tǒng),可以觀察調(diào)用鏈,異常,接口QPS,調(diào)用成功率等等。?
Infra層上業(yè)界也有諸多開源框架??偟膩碚f,基本架構(gòu)為:采集器+時(shí)序數(shù)據(jù)庫+Dashboard框架,例如:statsD/collected + graphite + grafana, prometheus, open-falcon等等。
接入層的監(jiān)控相對比較困難,CDN的可用性,網(wǎng)絡(luò)接入點(diǎn)的訪問成功率,現(xiàn)在可以采用分布式的APM工具進(jìn)行各地采樣,實(shí)時(shí)反饋當(dāng)?shù)鼐W(wǎng)絡(luò)訪問的穩(wěn)定性。
【故障觸達(dá)】- 即時(shí)消息和電話
故障響應(yīng)的效率高低取決于故障是否可以及時(shí)觸達(dá)應(yīng)急響應(yīng)人員。 OnCall流轉(zhuǎn),消息確認(rèn),故障處理狀態(tài)更新和同步這些是常規(guī)的手段。而在實(shí)踐中,故障定位和排障效率最高的方式是IM群,或者是會議室集中的方式。 原因是信息的及時(shí)同步。
故障觸達(dá)時(shí)所攜帶的故障發(fā)生上下文極為重要。 例如,故障發(fā)生時(shí)的變更,異常指標(biāo),初因定位,甚至可以通過算法分析獲取有效的根因范圍。
【故障止損】- 第一時(shí)間應(yīng)該選擇的動作
故障發(fā)生的不可預(yù)知性決定了我們需要有一整套的故障響應(yīng)預(yù)案,而且應(yīng)該是驗(yàn)證過的預(yù)案。 預(yù)案應(yīng)該至少包含:降級(接口,功能,系統(tǒng)能力),回滾(代碼,版本),雙活切換,備用機(jī)房等。
造成線上問題的原因目前來看主要有兩大類: 變更(配置,版本等),容量不足(積累,突發(fā)事件等)。無論哪一種,我們在應(yīng)對時(shí),第一選擇都應(yīng)該是經(jīng)過演練的預(yù)案。?
【故障復(fù)盤】- 有效改進(jìn)
故障在結(jié)束后進(jìn)行的復(fù)盤是整個(gè)故障管理完整閉環(huán)的最后一環(huán)。 對事不對人,首先關(guān)注技術(shù)缺陷,其次關(guān)注標(biāo)準(zhǔn)操作流程是否完善,最后才是追責(zé)。?
關(guān)于故障復(fù)盤,我們在乎的是改進(jìn)的落地效率。因此,明確改進(jìn)方案,時(shí)間,檢查點(diǎn)等,十分有必要。
此外,故障信息是否能自動化收集,分類,也體現(xiàn)了完整的技術(shù)運(yùn)營技術(shù)能力。
總結(jié):
互聯(lián)網(wǎng)系統(tǒng)的系統(tǒng)穩(wěn)定性最終反應(yīng)到人們面前的是故障發(fā)生率,故障級別等等。因此,提高系統(tǒng)穩(wěn)定性就是要提高故障管理能力,三分治理,七分自動化(智能化)。?