降級保護
服務降級通常是針對非核心業務在業務流量激增情況下一種服務策略,通過服務降級可以保證核心業務的順利進行。如果是主動降級,通常會返回一個默認值,被動降級是指當發現異常時,為瞭控制異常的影響范圍而觸發的自動服務降級。
降級分類
● 超時降級:配置好超時時間和超時重試次數,並使用異步機制探測恢復情況。
● 失敗次數降級:主要針對一些不穩定的API,當失敗調用次數達到一定閾值時自動降級,同樣要使用異步機制探測恢復情況。
● 故障降級:比如要調用的遠程服務“掛”瞭(網絡故障、DNS故障、HTTP服務返回錯誤的狀態碼、RPC服務拋出異常),系統可以直接降級。降級後的處理方案有:采用默認值(比如庫存服務“掛”瞭,返回默認現貨)、兜底數據(比如廣告服務“掛”瞭,返回提前準備好的一些靜態頁面)、緩存(使用之前暫存的一些數據)。
● 限流降級:在高並發或者秒殺場景中,系統可能會因為訪問量太大而導致崩潰,此時開發者會使用限流機制來限制訪問量,當達到限流閾值後,後續請求會被降級。
降級與熔斷的區別
降級和熔斷這兩個概念很容易被等同,它們最終達到的效果都是保護系統,都是為防止系統整體崩潰采用的技術手段。從用戶體驗的角度看,二者也有相似之處,都是某些功能暫時喪失可用性。但是,二者之間還是存在明顯的差別的,具體如下:
● 觸發條件的差別。熔斷通常是自動觸發的,而降級除瞭異常情況下的熔斷,也可以根據程序中預先設置的代碼邏輯進行手動降級。
● 分級的差別。熔斷通常依賴一個系統中的整體的框架處理邏輯,每個微服務都需要無差別地具備熔斷的特性,而降級則需要針對業務的優先級和重要性進行分級。對於核心業務,一般設置的級別較高;而對於核心系統下遊的非核心業務,如果是弱依賴關系,那麼級別可以相對降低,但是如果它們具有強依賴關系,那麼非核心業務此時也會升級為核心業務。在下圖中,網關系統處於調用鏈路的入口,優先級高;
數據分析、服務監控都是旁路系統,屬於輔助性功能,相對優先級較低。
下面總結一下Spring Cloud中兩種簡單的實現服務降級的方法。
● 在FeignClient中實現服務降級:
● 在Hystrix中一般使用fallbackMethod實現服務降級:
本文給大傢講解的內容是微服務容錯與隔離:降級保護
下篇文章給大傢講解的內容是微服務容錯與隔離:限流保護
覺得文章不錯的朋友可以轉發此文關註小編;
感謝大傢的支持!
本文就是願天堂沒有BUG給大傢分享的內容,大傢有收獲的話可以分享下,想學習更多的話可以到微信公眾號裡找我,我等你哦。