淺談對微服務中熔斷和降級的理解

在這裏插入圖片描述

一.前言

在股票市場,熔斷這個詞大家都不陌生,是指當股指波幅達到某個點後,交易所爲控制風險採取的暫停交易措施。相應的,服務熔斷一般是指軟件系統中,由於某些原因使得服務出現了過載現象,爲防止造成整個系統故障,從而採用的一種保護措施,所以很多地方把熔斷亦稱爲過載保護。大家都見過女生旅行吧,大號的旅行箱是必備物,平常走走近處綽綽有餘,但一旦出個遠門,再大的箱子都白搭了,怎麼辦呢?常見的情景就是把物品拿出來分分堆,比了又比,最後一些非必需品的就忍痛放下了,等到下次箱子夠用了,再帶上用一用。而服務降級,就是這麼回事,整體資源快不夠了,忍痛將某些服務先關掉,待渡過難關,再開啓回來。

二.熔斷

當下遊的服務因爲某種原因突然變得不可用響應過慢,上游服務爲了保證自己整體服務的可用性,不再繼續調用目標服務,直接返回,快速釋放資源。如果目標服務情況好轉則恢復調用。
需要說明的是熔斷其實是一個框架級的處理,那麼這套熔斷機制的設計,基本上業內用的是斷路器模式,如Martin Fowler提供的狀態轉換圖如下所示
在這裏插入圖片描述

  • 最開始處於closed狀態,一旦檢測到錯誤到達一定閾值,便轉爲open狀態;
  • 這時候會有個 reset timeout,到了這個時間了,會轉移到half open狀態;
  • 嘗試放行一部分請求到後端,一旦檢測成功便迴歸到closed狀態,即恢復服務;

三.降級

關於降級,這裏有兩種場景:

  • 當下遊的服務因爲某種原因響應過慢,下游服務主動停掉一些不太重要的業務,釋放出服務器資源,增加響應速度!
  • 當下遊的服務因爲某種原因不可用,上游主動調用本地的一些降級邏輯,避免卡頓,迅速返回給用戶!

其實乍看之下,很多人還是不懂熔斷和降級的區別!

其實應該要這麼理解:

  • 服務降級有很多種降級方式!如開關降級、限流降級、熔斷降級!
  • 服務熔斷屬於降級方式的一種!

可能有的人不服,覺得熔斷是熔斷、降級是降級,分明是兩回事啊!其實不然,因爲從實現上來說,熔斷和降級必定是一起出現。因爲當發生下游服務不可用的情況,這個時候爲了對最終用戶負責,就需要進入上游的降級邏輯了。因此,將熔斷降級視爲降級方式的一種,也是可以說的通的!

四.熔斷和降級的互相交集

4.1 類似性

  1. 目的很一致,都是從可用性可靠性着想,爲防止系統的整體緩慢甚至崩潰,採用的技術手段;
  2. 最終表現類似,對於兩者來說,最終讓用戶體驗到的是某些功能暫時不可達或不可用;
  3. 粒度一般都是服務級別,當然,業界也有不少更細粒度的做法,比如做到數據持久層(允許查詢,不允許增刪改);
  4. 自治性要求很高,熔斷模式一般都是服務基於策略的自動觸發,降級雖說可人工干預,但在微服務架構下,完全靠人顯然不可能,開關預置、配置中心都是必要手段;

4.2 區別

  1. 觸發原因不太一樣,服務熔斷一般是某個服務(下游服務)故障引起,而服務降級一般是從整體負荷考慮;
  2. 管理目標的層次不太一樣,熔斷其實是一個框架級的處理,每個微服務都需要(無層級之分),而降級一般需要對業務有層級之分(比如降級一般是從最外圍服務開始)
  3. 實現方式不太一樣

參考文章

[1].【原創】談談服務雪崩、降級與熔斷 [N] 孤獨煙

[2]. 談談我對服務熔斷、服務降級的理解 [N] developerguy

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章