java程序員必知必會的微服務容錯與隔離:降級保護,實現(xiàn)降級方法
降級保護
服務降級通常是針對非核心業(yè)務在業(yè)務流量激增情況下一種服務策略,通過服務降級可以保證核心業(yè)務的順利進行。如果是主動降級,通常會返回一個默認值,被動降級是指當發(fā)現(xiàn)異常時,為了控制異常的影響范圍而觸發(fā)的自動服務降級。
降級分類
● 超時降級:配置好超時時間和超時重試次數(shù),并使用異步機制探測恢復情況。
● 失敗次數(shù)降級:主要針對一些不穩(wěn)定的API,當失敗調(diào)用次數(shù)達到一定閾值時自動降級,同樣要使用異步機制探測恢復情況。
● 故障降級:比如要調(diào)用的遠程服務“掛”了(網(wǎng)絡故障、DNS故障、HTTP服務返回錯誤的狀態(tài)碼、RPC服務拋出異常),系統(tǒng)可以直接降級。降級后的處理方案有:采用默認值(比如庫存服務“掛”了,返回默認現(xiàn)貨)、兜底數(shù)據(jù)(比如廣告服務“掛”了,返回提前準備好的一些靜態(tài)頁面)、緩存(使用之前暫存的一些數(shù)據(jù))。
● 限流降級:在高并發(fā)或者秒殺場景中,系統(tǒng)可能會因為訪問量太大而導致崩潰,此時開發(fā)者會使用限流機制來限制訪問量,當達到限流閾值后,后續(xù)請求會被降級。
降級與熔斷的區(qū)別
降級和熔斷這兩個概念很容易被等同,它們最終達到的效果都是保護系統(tǒng),都是為防止系統(tǒng)整體崩潰采用的技術手段。從用戶體驗的角度看,二者也有相似之處,都是某些功能暫時喪失可用性。但是,二者之間還是存在明顯的差別的,具體如下:
● 觸發(fā)條件的差別。熔斷通常是自動觸發(fā)的,而降級除了異常情況下的熔斷,也可以根據(jù)程序中預先設置的代碼邏輯進行手動降級。
● 分級的差別。熔斷通常依賴一個系統(tǒng)中的整體的框架處理邏輯,每個微服務都需要無差別地具備熔斷的特性,而降級則需要針對業(yè)務的優(yōu)先級和重要性進行分級。對于核心業(yè)務,一般設置的級別較高;而對于核心系統(tǒng)下游的非核心業(yè)務,如果是弱依賴關系,那么級別可以相對降低,但是如果它們具有強依賴關系,那么非核心業(yè)務此時也會升級為核心業(yè)務。在下圖中,網(wǎng)關系統(tǒng)處于調(diào)用鏈路的入口,優(yōu)先級高;
數(shù)據(jù)分析、服務監(jiān)控都是旁路系統(tǒng),屬于輔助性功能,相對優(yōu)先級較低。

下面總結(jié)一下Spring Cloud中兩種簡單的實現(xiàn)服務降級的方法。
● 在FeignClient中實現(xiàn)服務降級:

● 在Hystrix中一般使用fallbackMethod實現(xiàn)服務降級:


本文給大家講解的內(nèi)容是微服務容錯與隔離:降級保護
下篇文章給大家講解的內(nèi)容是微服務容錯與隔離:限流保護
覺得文章不錯的朋友可以轉(zhuǎn)發(fā)此文關注小編;
感謝大家的支持!
