天天看點

熔斷和降級的真實關系,圖文并茂,看完秒懂降級熔斷熔斷和降級的關系降級方式完

剛開始我以為熔斷和降級是一體的,以為他們必須配合使用; 隻不過名字不一樣而已,但是當我經過思考過後,發現他們其實不是一個東西;

降級

什麼是服務降級呢?降級主要有以下幾種情況

  • 逾時:當下遊的服務因為某種原因響應過慢,下遊服務主動停掉一些不太重要的業務,釋放出伺服器資源,增加響應速度!
  • 不可用:當下遊的服務因為某種原因不可用,上遊主動調用本地的一些降級邏輯,避免卡頓,迅速傳回給使用者!
  • 限流:防止上遊服務請求太多導緻服務崩潰,是以限制請求的數量,來達到保護下遊服務的目的,當請求的流量到達一定門檻值時,直接拒絕多餘的請求,執行降級邏輯

看到這,相信你已經看到了一個相同點,就是以上三者(逾時、不可用、限流)觸發時,都會走同一個邏輯,那就是降級邏輯,在hystrix裡面叫做fallback;

熔斷和降級的真實關系,圖文并茂,看完秒懂降級熔斷熔斷和降級的關系降級方式完

熔斷

什麼是服務熔斷

熔斷很好了解,就是一個斷開的過程;

熔斷就像是家裡的保險絲一樣,當電流達到一定條件時,比如保險絲能承受的電流是5A,如果你的電流達到了6A,因為保險絲承受不了這麼高的電流,保險絲就會融化,這時候電路就會斷開,起到了保護電器的作用;

在微服務裡面也是一樣,當下遊的服務因為某種原因突然變得不可用或響應過慢,上遊服務為了保證自己整體服務的可用性,不再繼續調用目标服務,直接傳回,快速釋放資源。如果目标服務情況好轉則恢複調用;

熔斷和降級的關系

說了那麼多,其實也能想到了,降級和熔斷其實就是服務安全中的2個不同的流程,在服務發生故障時,肯定是先斷開(熔斷)與服務的連接配接,然後在執行降級邏輯;

熔斷和降級的真實關系,圖文并茂,看完秒懂降級熔斷熔斷和降級的關系降級方式完

那既然不管怎樣都會執行降級邏輯,這時候就可以了解為 降級是一種設計思想,在java層面就是一個接口,而熔斷是降級的不同實作方式,他們的關系如下圖:

熔斷和降級的真實關系,圖文并茂,看完秒懂降級熔斷熔斷和降級的關系降級方式完

降級方式

那麼我們現在知道降級是一個接口了,接下來在看看他們的實作方式是怎樣的吧

1、熔斷降級(不可用)

熔斷邏輯是這樣的,A服務調用B服務,失敗次數達到一定門檻值後 ,A服務的斷路器打開,就不在請求B服務,而是直接執行本地的fallback方法;這種叫做熔斷降級,看到這裡,也許你已經明白了,熔斷隻是降級的其中一種實作方式;

熔斷和降級的真實關系,圖文并茂,看完秒懂降級熔斷熔斷和降級的關系降級方式完
2、逾時降級

同樣是A服務調用B服務,B服務響應超過了A服務設定的門檻值後,就會執行降級邏輯;

熔斷和降級的真實關系,圖文并茂,看完秒懂降級熔斷熔斷和降級的關系降級方式完
3、限流降級

同樣是A服務調用B服務,服務A的連接配接已超過自身能承載的最大連接配接數,比如說A能承載的連接配接數為5,但是目前的并發有6個請求同時進行,前5請求能正常請求,最後一個會直接拒絕,執行fallback降級邏輯;

熔斷和降級的真實關系,圖文并茂,看完秒懂降級熔斷熔斷和降級的關系降級方式完

看完這個文章,你有沒有懂得熔斷和降級之間的關系呢? 面試的情況下,你知道該怎麼回答了嗎? 如果有疑問,請在評論區告訴我!