Spring Cloud學習(3) - Hystrix服務熔斷與降級

一、什麼是熔斷?爲什麼要熔斷?

熔斷就是類似一個保險絲一樣的功能,當Hystrix判定下游服務不可用的時候,發生該服務的調用時,直接返回失敗。

熔斷對微服務來說是必須的,因爲在Java中,每個HTTP請求都會開啓一個新的線程,當下遊服無法正常調用的時候,線程通常會阻塞,一直到Timeout結束,在併發量較大的時候,上游服務所在服務器很可能就會由於阻塞的線程將機器的資源耗盡,導致上游的服務一起掛掉

二、服務降級又是什麼,和熔斷有啥區別?

服務降級是從整個系統的負荷的角度進行考慮,在高負荷的情況下,通過關閉一些非核心接口的業務邏輯,返回一個提前準備好信息(Fallback),爲核心接口騰出資源,保證核心功能的正常運行。這樣做在一段時間內使部分非核心業務無法進行,來保證整個系統的穩定性和可用性。

熔斷與降級的區別:

相同點

  1. 目標一致,從可用性和可靠性出發,防止系統的範圍崩潰;
  2. 用戶體驗相似,用戶會發現部分功能暫時不可用;

不同點

  1. 觸發原因:熔斷一般是謀個下游服務服務故障觸發的;降級是由於整個系統的高負荷,針對性阻斷非核心接口;
  2. 管理的目標層次:熔斷是框架級的,每個微服務都需要的;降級一般是根據業務的重要性進行層級劃分,從外圍服務開始降級;
  3. 人工干預:熔斷一般是服務交由框架策略自動觸發和恢復的;降級可以通過開關預置,配置中心等手段實現自動,但是有些場景下會進行手動干預降級:比如大型活動的流量到來之前,提前關閉一些非核心功能;
  4. 粒度:熔斷一般是整個服務不可用;降級會根據業務需求,做到接口級別的降級,比如單個服務保留訂單查詢,降級訂單創建;

三、Hystrix是如何判斷服務是可用的?

上文中我們說到熔斷一般是交由框架斷路器配置,自動判斷進行熔斷的。

Spring Cloud一般是使用Hystrix作爲斷路器,它一共有三種狀態:

  1. 關閉:起始狀態,所有請求都可以通過,當錯誤請求達到一定的閾值時,狀態轉換爲打開
  2. 打開:請求直接短路,返回失敗響應信息,經過一段時間後,狀態轉換爲半開
  3. 半開:該狀態下,如果下次請求成功,則狀態轉換爲關閉,反之轉換爲打開

狀態轉化的判定配置主要有以下三個:

hystrix:
  command:
    default:
      circuitBreaker:
        # hystrix打開多長時間之後嘗試恢復(轉爲半開), 默認5s
        sleepWindowInMilliseconds: 5
        # 配置時間窗口內達到此數量的失敗後,打開hystrix
        requestVolumeThreshold: 20
        # 失敗率達到百分比之後,打開hystrix
        errorThresholdPercentage: 50
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章