熔斷降級理解
1、為什麼需要熔斷降級
(1)需求背景
它是系統負載過高,突發流量或者網路等各種異常情況介紹,常用的解決方案。
在一個分散式系統裡,一個服務依賴多個服務,可能存在某個服務呼叫失敗,比如超時、異常等,如何能夠保證在一個依賴出問題的情況下,不會導致整體服務失敗。
比如:某微服務業務邏輯複雜,在高負載情況下出現超時情況。
內部條件:程式bug導致死迴圈、存在慢查詢、程式邏輯不對導致耗盡記憶體
外部條件:黑客攻擊、促銷、第三方系統響應緩慢。
(2)解決思路
解決介面級故障的核心思想是優先保障核心業務和優先保障絕大部分使用者。比如登入功能很重要,當訪問量過高時,停掉註冊功能,為登入騰出資源。
(3)解決策略
熔斷,降級,限流,排隊。
2、什麼是熔斷
一般是某個服務故障或者是異常引起的,類似現實世界中的‘保險絲’,當某個異常條件被觸發,直接熔斷整個服務,而不是一直等到此服務超時,為了防止防止整個系統的故障,
而採用了一些保護措施。過載保護。比如A服務的X功能依賴B服務的某個介面,當B服務介面響應很慢時,A服務X功能的響應也會被拖慢,進一步導致了A服務的執行緒都卡在了X功能
上,A服務的其它功能也會卡主或拖慢。此時就需要熔斷機制,即A服務不在請求B這個介面,而可以直接進行降級處理。
3、什麼是降級
伺服器當壓力劇增的時候,根據當前業務情況及流量,對一些服務和頁面進行有策略的降級
大部分客戶的得到正確的相應。
自動降級:超時、失敗次數、故障、限流
(1)配置好超時時間(非同步機制探測回覆情況);
(2)不穩的的api呼叫次數達到一定數量進行降級(非同步機制探測回覆情況);
(3)呼叫的遠端服務出現故障(dns、http服務錯誤狀態碼、網路故障、Rpc服務異常),直接進行降級。
人工降級:秒殺、雙十一大促降級非重要的服務。
4、熔斷和降級異同
相同點:
1)從可用性和可靠性觸發,為了防止系統崩潰
2)最終讓使用者體驗到的是某些功能暫時不能用
不同點:
1)服務熔斷一般是下游服務故障導致的
2)觸發原因不同,上面顏色字型已解釋
5、熔斷到降級的流程講解
Hystrix提供瞭如下的幾個關鍵引數,來對一個熔斷器進行配置:
circuitBreaker.requestVolumeThreshold //滑動視窗的大小,預設為20
circuitBreaker.sleepWindowInMilliseconds //過多長時間,熔斷器再次檢測是否開啟,預設為5000,即5s鍾
circuitBreaker.errorThresholdPercentage //錯誤率,預設50%
3個引數放在一起,所表達的意思就是:
每當20個請求中,有50%失敗時,熔斷器就會開啟,此時再呼叫此服務,將會直接返回失敗,不再調遠端服務。直到5s鍾之後,重新檢測該觸發條件,判斷是否把熔斷器關閉,或者繼續開啟。
這裡面有個很關鍵點,達到熔斷之後,那麼後面它就直接不去調該微服務。那麼既然不去調該微服務或者調的時候出現異常,出現這種情況首先不可能直接把錯誤資訊傳給使用者,所以針對熔斷
我們可以考慮採取降級策略。所謂降級,就是當某個服務熔斷之後,伺服器將不再被呼叫,此時客戶端可以自己準備一個本地的fallback回撥,返回一個預設值。
這樣做,雖然服務水平下降,但好歹可用,比直接掛掉要強,當然這也要看適合的業務場景。