官網github地址:https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
除了流量控制以外,對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措施之一。由於調用關係的複雜性,如果調用鏈路中的某個資源不穩定,最終會導致請求發生堆積。Sentinel 熔斷降級會在調用鏈路中某個資源出現不穩定狀態時(例如調用超時或異常比例升高),對這個資源的調用進行限制,讓請求快速失敗,避免影響到其它的資源而導致級聯錯誤。當資源被降級後,在接下來的降級時間窗口之內,對該資源的調用都自動熔斷(默認行爲是拋出 DegradeException
)。
降級策略
我們通常用以下幾種方式來衡量資源是否處於穩定的狀態:
- 平均響應時間 (
DEGRADE_GRADE_RT
):當 1s 內持續進入 N 個請求,對應時刻的平均響應時間(秒級)均超過閾值(count
,以 ms 爲單位),那麼在接下的時間窗口(DegradeRule
中的timeWindow
,以 s 爲單位)之內,對這個方法的調用都會自動地熔斷(拋出DegradeException
)。注意 Sentinel 默認統計的 RT 上限是 4900 ms,超出此閾值的都會算作 4900 ms,若需要變更此上限可以通過啓動配置項-Dcsp.sentinel.statistic.max.rt=xxx
來配置。 - 異常比例 (
DEGRADE_GRADE_EXCEPTION_RATIO
):當資源的每秒請求量 >= N(可配置),並且每秒異常總數佔通過量的比值超過閾值(DegradeRule
中的count
)之後,資源進入降級狀態,即在接下的時間窗口(DegradeRule
中的timeWindow
,以 s 爲單位)之內,對這個方法的調用都會自動地返回。異常比率的閾值範圍是[0.0, 1.0]
,代表 0% - 100%。 - 異常數 (
DEGRADE_GRADE_EXCEPTION_COUNT
):當資源近 1 分鐘的異常數目超過閾值之後會進行熔斷。注意由於統計時間窗口是分鐘級別的,若timeWindow
小於 60s,則結束熔斷狀態後仍可能再進入熔斷狀態。
注意:異常降級僅針對業務異常,對 Sentinel 限流降級本身的異常(BlockException
)不生效。爲了統計異常比例或異常數,需要通過 Tracer.trace(ex)
記錄業務異常。
而sentinel-dashboard中的降級規則則如下圖配置:
RT (平均響應時間,秒級)
平均響應時間 超出閾值 且 在時間窗口內通過的請求>=5, 兩個條件同時滿足後觸發降級窗口期過後關閉斷路器
RT最大4900 (更大的需要通過-Dcsp.sentinel.statistic.max.rt= XXXX才能生效)
異常比列(秒級)
QPS >= 5且異常比例(秒級統計)超過閾值時,觸發降級;時間窗結束後,關閉降級
異常數(分鐘級)
異常數(分鐘統計)超過閾值時,觸發降級;時間窗口結束後,關閉降級
注:Sentinel熔斷降級會在調用鏈路中某個資源出現不穩定狀態時(例如調用超時或異常比例升高),對這 個資源的調用進行限制,讓請求快速失敗,避免影響到其它的資源而導致級聯錯誤。
當資源被降級後,在接下來的降級時間窗口之內,對該資源的調用都自動熔斷(默認行爲是拋出DegradeException)。
Sentinel的斷路器是沒有半開狀態的。
半開的狀態系統自動去檢測是否請求有異常,
沒有異常就關閉斷路器恢復使用,
有異常則繼續打開斷路器不可用。具體可以參考Hystrixhttps://blog.csdn.net/TOP__ONE/article/details/105579609
下面一篇文章將繼續講述實戰演示~