Sentinel降級規則整理


熔斷降級

  • 對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措施之一;
  • 對不穩定的弱依賴服務調用進行熔斷降級,暫時切斷不穩定調用,避免局部不穩定因素導致整體的雪崩;
  • 熔斷降級作為保護自身的手段,通常在客戶端(調用端)進行配置;

  換個通俗的說法,如下

  降級:保證主服務,停止其他不是主要的服務;

  熔斷:當服務調用第二/三方服務出現不可用或超時等情況,為防止系統線程池占滿而出現雪崩,暫時對服務停止調用;

 

Sentinel降級規則

  官方文檔:[https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7]

  • Sentinel 熔斷策略
    • 慢調用比例 (SLOW_REQUEST_RATIO):選擇以慢調用比例作為閾值,需要設置允許的慢調用 RT(即最大的響應時間),請求的響應時間大於該值則統計為慢調用。當單位統計時長(statIntervalMs)內請求數目大於設置的最小請求數目,並且慢調用的比例大於閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求響應時間小於設置的慢調用 RT 則結束熔斷,若大於設置的慢調用 RT 則會再次被熔斷;

      

 

    • 異常比例 (ERROR_RATIO):當單位統計時長(statIntervalMs)內請求數目大於設置的最小請求數目,並且異常的比例大於閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%;

      

 

 

      • 比例閾值:異常數對於最小請求數的占有比例;
      • 熔斷時長:超過時間后會嘗試恢復;
      • 最小請求數:熔斷觸發的最小請求數,請求數小於該值時即使異常比率超出閾值也不會熔斷;

 

    • 異常數 (ERROR_COUNT):當單位統計時長內的異常數目超過閾值之后會自動進行熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷;

      

      • 異常數:統計的異常數;
      • 熔斷時長:超過時間后會嘗試恢復;
      • 最小請求數:熔斷觸發的最小請求數,請求數小於該值時即使異常比率超出閾值也不會熔斷;

 

  注:注意異常降級僅針對業務異常,對 Sentinel 限流降級本身的異常(BlockException)不生效;  

 

服務熔斷的三種狀態

  • 熔斷關閉(Closed)

    • 服務沒有故障時,熔斷器所處的狀態,對調用方的調用不做任何限制;
  • 熔斷開啟(Open)

    • 后續對該服務接口的調用不再經過網絡,直接執行本地的fallback方法;
  • 半熔斷(Half-Open)

    • 所謂半熔斷就是嘗試恢復服務調用,允許有限的流量調用該服務,並監控調用成功率;

 

  如下圖:

  

    • 熔斷恢復:
      • 經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態)嘗試恢復服務調用,允許有限的流量調用該服務,並監控調用成功率;

      • 如果成功率達到預期,則說明服務已恢復,進入熔斷關閉狀態;如果成功率仍舊很低,則重新進入熔斷狀態;

 

Sentinel自定義異常降級處理

  Spring Cloud Alibaba從2.1.0版本到2.2.0版本升級后,Sentinel里面依賴進行了改動,且不向下兼容;

  

 

  參考:[https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E#%E7%BB%84%E4%BB%B6%E7%89%88%E6%9C%AC%E5%85%B3%E7%B3%BB

 

  舊版:實現UrlBlockHandler並重寫blocked方法;

  新版:實現BlockExceptionHandler並重寫handle方法;

 

  Sentinel中的異常總類:

Sentinel 限流降級本身的異常
BlockException

限流異常
FlowException

降級異常
DegradeException

參數限流異常
ParamFlowException

系統負載異常
SystemBlockException 

授權異常
AuthorityException

  

  

 

 

 

Feign整合Sentinel

feign:
  sentinel:
    enabled: true

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM