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