由于爆炸性的流量沖擊,對(duì)一些服務(wù)進(jìn)行有策略的放棄,以此緩解系統(tǒng)壓力,保證目前主要業(yè)務(wù)的正常運(yùn)行。它主要是針對(duì)非正常情況下的應(yīng)急服務(wù)措施:當(dāng)此時(shí)一些業(yè)務(wù)服務(wù)無法執(zhí)行時(shí),給出一個(gè)統(tǒng)一的返回結(jié)果。
1、降級(jí)服務(wù)的特征
原因:整體負(fù)荷超出整體負(fù)載承受能力。
目的:保證重要或基本服務(wù)正常運(yùn)行,非重要服務(wù)延遲使用或暫停使用。
大?。航档头?wù)粒度,要考慮整體模塊粒度的大小,將粒度控制在合適的范圍內(nèi)。
可控性:在服務(wù)粒度大小的基礎(chǔ)上增加服務(wù)的可控性,后臺(tái)服務(wù)開關(guān)的功能是一項(xiàng)必要配置(單機(jī)可配置文件,其他可領(lǐng)用數(shù)據(jù)庫和緩存),可分為手動(dòng)控制和自動(dòng)控制。
次序:一般從外圍延伸服務(wù)開始降級(jí),需要有一定的配置項(xiàng),重要性低的優(yōu)先降級(jí),比如可以分組設(shè)置等級(jí)1-10,當(dāng)服務(wù)需要降級(jí)到某一個(gè)級(jí)別時(shí),進(jìn)行相關(guān)配置。
2、降級(jí)方式
延遲服務(wù):比如發(fā)表了評(píng)論,重要服務(wù),比如在文章中顯示正常,但是延遲給用戶增加積分,只是放到一個(gè)緩存中,等服務(wù)平穩(wěn)之后再執(zhí)行。
在粒度范圍內(nèi)關(guān)閉服務(wù)(片段降級(jí)或服務(wù)功能降級(jí)):比如關(guān)閉相關(guān)文章的推薦,直接關(guān)閉推薦區(qū)。
頁面異步請(qǐng)求降級(jí):比如商品詳情頁上有推薦信息/配送至等異步加載的請(qǐng)求,如果這些信息響應(yīng)慢或者后端服務(wù)有問題,可以進(jìn)行降級(jí)。
頁面跳轉(zhuǎn)(頁面降級(jí)):比如可以有相關(guān)文章推薦,但是更多的頁面則直接跳轉(zhuǎn)到某一個(gè)地址。
寫降級(jí):比如秒殺搶購(gòu),我們可以只進(jìn)行Cache的更新,然后異步同步扣減庫存到DB,保證最終一致性即可,此時(shí)可以將DB降級(jí)為Cache。
讀降級(jí):比如多級(jí)緩存模式,如果后端服務(wù)有問題,可以降級(jí)為只讀緩存,這種方式適用于對(duì)讀一致性要求不高的場(chǎng)景。
3、降級(jí)預(yù)案
在進(jìn)行降級(jí)之前要對(duì)系統(tǒng)進(jìn)行梳理,看看系統(tǒng)是不是可以丟卒保帥;從而梳理出哪些必須誓死保護(hù),哪些可降級(jí);比如可以參考日志級(jí)別設(shè)置預(yù)案。
一般:比如有些服務(wù)偶爾因?yàn)榫W(wǎng)絡(luò)抖動(dòng)或者服務(wù)正在上線而超時(shí),可以自動(dòng)降級(jí)。
警告:有些服務(wù)在一段時(shí)間內(nèi)成功率有波動(dòng)(如在95~100%之間),可以自動(dòng)降級(jí)或人工降級(jí),并發(fā)送告警。
錯(cuò)誤:比如可用率低于90%,或者數(shù)據(jù)庫連接池被打爆了,或者訪問量突然猛增到系統(tǒng)能承受的最大閥值,此時(shí)可以根據(jù)情況自動(dòng)降級(jí)或者人工降級(jí)。
嚴(yán)重錯(cuò)誤:比如因?yàn)樘厥庠驍?shù)據(jù)錯(cuò)誤了,此時(shí)需要緊急人工降級(jí)。
4、服務(wù)降級(jí)分類
降級(jí)按照是否自動(dòng)化可分為:自動(dòng)開關(guān)降級(jí)(超時(shí)、失敗次數(shù)、故障、限流)和人工開關(guān)降級(jí)(秒殺、電商大促等)。
降級(jí)按照功能可分為:讀服務(wù)降級(jí)、寫服務(wù)降級(jí)。
降級(jí)按照處于的系統(tǒng)層次可分為:多級(jí)降級(jí)。
5、自動(dòng)降級(jí)分類
超時(shí)降級(jí):主要配置好超時(shí)時(shí)間和超時(shí)重試次數(shù)和機(jī)制,并使用異步機(jī)制探測(cè)回復(fù)情況。
失敗次數(shù)降級(jí):主要是一些不穩(wěn)定的api,當(dāng)失敗調(diào)用次數(shù)達(dá)到一定閥值自動(dòng)降級(jí),同樣要使用異步機(jī)制探測(cè)回復(fù)情況。
故障降級(jí):比如要調(diào)用的遠(yuǎn)程服務(wù)掛掉了(網(wǎng)絡(luò)故障、DNS故障、http服務(wù)返回錯(cuò)誤的狀態(tài)碼、rpc服務(wù)拋出異常),則可以直接降級(jí)。降級(jí)后的處理方案有:默認(rèn)值(比如庫存服務(wù)掛了,返回默認(rèn)現(xiàn)貨)、兜底數(shù)據(jù)(比如廣告掛了,返回提前準(zhǔn)備好的一些靜態(tài)頁面)、緩存(之前暫存的一些緩存數(shù)據(jù))。
限流降級(jí):當(dāng)我們?nèi)ッ霘⒒蛘邠屬?gòu)一些限購(gòu)商品時(shí),此時(shí)可能會(huì)因?yàn)樵L問量太大而導(dǎo)致系統(tǒng)崩潰,此時(shí)開發(fā)者會(huì)使用限流來進(jìn)行限制訪問量,當(dāng)達(dá)到限流閥值,后續(xù)請(qǐng)求會(huì)被降級(jí);降級(jí)后的處理方案可以是:排隊(duì)頁面(將用戶導(dǎo)流到排隊(duì)頁面等一會(huì)重試)、無貨(直接告知用戶沒貨了)、錯(cuò)誤頁(如活動(dòng)太火爆了,稍后重試)。