高並發系統設計--熔斷降級

雜文論 發佈 2022-07-31T06:55:13.073049+00:00

熔斷降級主要用來解決由於依賴的資源或者服務不可用,最終導致整體服務宕機的情況。在討論熔斷與降級的時候,一般會涉及到另一個專業名詞:雪崩。雪崩主要是指由於局部故障最終導致全局故障,致使整個系統無法正常工作的情況。雪崩一般由服務間的級聯反應引起,雪崩主要由兩個方面引起:1.

熔斷降級主要用來解決由於依賴的資源或者服務不可用,最終導致整體服務宕機的情況。

在討論熔斷與降級的時候,一般會涉及到另一個專業名詞:雪崩。雪崩主要是指由於局部故障最終導致全局故障,致使整個系統無法正常工作的情況。雪崩一般由服務間的級聯反應引起,雪崩主要由兩個方面引起:1. 資源耗盡或資源不足;2. 服務間相互依賴。

為了解決這種由於局部故障引發全局故障的問題,解決的思路就是在檢測到某一個服務的響應時間出現異常時,切斷調用它的服務與它之間的聯繫,讓服務的調用快速返回失敗,從而釋放這次請求持有的資源。這個思路也就是我們經常提到的降級和熔斷機制。

熔斷機制指服務調用如果返回錯誤或者超時的次數超過一定閾值,則後續的請求不再發向遠程服務而是暫時返回錯誤。這種機制會在調用方維護一個有限狀態機。有三種狀態:關閉狀態(調用遠程服務)、半打開狀態(嘗試調用遠程服務)和打開狀態(直接返回錯誤)。三種狀態的轉換如下圖:

降級機制,是一個相對更大的概念,站在整體系統負載的角度上,放棄部分非核心功能或者服務,保證整體的可用性的方法,是一種有損的系統容錯方式。上面介紹的熔斷也屬於一種降級機制,此外還包括限流降級和開關降級。

開關降級指的是在代碼中預先埋設一些「開關」,用來控制服務調用的返回值,開關可以存儲在配置中心中,系統出現問題需要降級時,通過配置中心動態修改,達到不重啟服務快速降級的目地。例如:開關關閉的時候正常調用遠程服務,開關打開時則執行降級的策略。

降級機制會放棄系統的非核心功能,只提供最小可用功能。例如:電商系統中只展示商品數據,不展示評論數據。不同的系統,會有不同的降級策略,例如:讀數據場景,降級後可以只讀取緩存數據;輪詢查詢場景,可以降低查詢頻率;寫數據場景,可以把同步寫轉換成異步寫,犧牲一些數據一致性保證系統的可用性。

總之,熔斷和降級是保證系統穩定性和可用性的重要手段,在訪問第三方服務或者資源的時候都需要考慮增加降級開關或者熔斷機制,保證資源或者服務出現問題時,不會對整體系統產生災難性的影響。

關鍵字: