“五一”五天假期可夠長了鹿霸,閑暇之際拉队,想想寫點東西。我負(fù)責(zé)的社區(qū)和一些平臺項目握牧,對系統(tǒng)的穩(wěn)定性要求特別高(去年也是出了幾次小的事故)容诬,今天總結(jié)下近一年的穩(wěn)定性這塊工作。
宏觀上沿腰,從研發(fā)的流程上去看穩(wěn)定性览徒。
穩(wěn)定性.png
整體思路是這樣,分別就幾個階段談一下痛點和心得颂龙。
架構(gòu)階段
- 異地容災(zāi) 實現(xiàn)了機(jī)房級的容災(zāi)习蓬。目前只做到讀多活,寫還未支持(存儲方案還不成熟)
- 異構(gòu)降級 對于非常重要的功能措嵌,防止空窗躲叼,可以考慮異構(gòu)實現(xiàn)去降級,比如把整個請求kv存起來铅匹。對大多數(shù)互聯(lián)網(wǎng)業(yè)務(wù)是能滿足基本體驗要求的押赊。
- 異步化結(jié)合前端效果對系統(tǒng)的可用性有非常大的提升。首先異步化的前提條件當(dāng)然是不要求強(qiáng)一致包斑,在涉及金錢等業(yè)務(wù)可能不適合。舉個例子涕俗,發(fā)評論依賴內(nèi)容過濾罗丰、依賴主庫,那么異步化后可以滿足延遲寫入但不丟失再姑。前端提交后本地顯示萌抵,用戶無感。這里要注意異步消費的冪等設(shè)計,另外绍填,出現(xiàn)Error后的重試和補(bǔ)償機(jī)制也要注意霎桅。
- 隔離性往往容易被忽視,真正當(dāng)出了大問題才會被引起重視讨永。重要的業(yè)務(wù)要在資源滔驶、部署上做物理隔離
- 避免單點,往往要求service服務(wù)做到無狀態(tài)卿闹,有狀態(tài)的要靠中間件(中間件比業(yè)務(wù)的穩(wěn)定性要好很多)
編碼階段
- 最最重要的一點是揭糕,“對95%的研發(fā)同學(xué)來說,能不要自己實現(xiàn)的锻霎,盡量走統(tǒng)一的框架或者lib”著角。我們實現(xiàn)了很多通用的lib或者sdk,比如緩存代碼旋恼、并發(fā)調(diào)用吏口、job merge等等。當(dāng)然這里如果有必要是需要提供新的service服務(wù)的冰更。
- 分布式限流 對于網(wǎng)關(guān)來說产徊,一般做到按業(yè)務(wù)去配限流額度。對于資源的限流控制粒度有時候比較繁瑣冬殃,比如mysql的訪問囚痴,如果要做到sql級限流是比較麻煩的。
- 依賴治理也是個挑戰(zhàn)审葬,Everything fails深滚。這塊一般會非常業(yè)務(wù),需要項目研發(fā)owner主動去梳理并且理解業(yè)務(wù)涣觉。套用老板的一句話痴荐,“別人都炸了你要還能活下來”,這樣的標(biāo)準(zhǔn)去思考官册、去治理依賴生兆、去容錯。
- 熔斷 熔斷是指下游依賴業(yè)務(wù)出現(xiàn)系統(tǒng)負(fù)載膝宁,應(yīng)對減少訪問流量鸦难、慢慢恢復(fù)流量,避免雪崩员淫。不然系統(tǒng)很容易被“打”的起不來合蔽。
- 超時 之前的文章也提到過,合理的超時配置配合降級介返,才能不容易出現(xiàn)“木桶短板”