概述
除了流量控制以外,對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措施之一。
由于調用關系的復雜性,如果調用鏈路中的某個資源不穩定,最終會導致請求發生堆積。
Sentinel 熔斷降級會在調用鏈路中某個資源出現不穩定狀態時(例如調用超時、異常比例升高、異常數堆積)
對這個資源的調用進行限制,讓請求快速失敗從而避免影響到其它的資源而導致級聯錯誤。
當資源被降級后,在接下來的降級時間窗口之內會對該資源的調用自動熔斷
(默認行為是拋出 DegradeException
)。
綜上可知:
- 熔斷是用來避免服務架構中的雪崩的發生
- 當監控到鏈路中的異常(響應時間超時、異常比例升高、異常數堆積)達到閾值自動觸發熔斷
- 在降級時間窗口之內會對該資源的調用自動熔斷
熔斷(降級)策略
慢調用比例
概念
慢調用比例 (SLOW_REQUEST_RATIO
):
選擇以慢調用比例作為閾值,需要設置允許的慢調用 RT(即最大的響應時間),
請求的響應時間大于該值則統計為慢調用。
當單位統計時長(statIntervalMs
)內請求數目大于設置的最小請求數目,
并且慢調用的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。
經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),
若接下來的一個請求響應時間小于設置的慢調用 RT 則結束熔斷,若大于設置的慢調用 RT 則會再次被熔斷。
注意Sentinel默認統計的RT上限是4900ms,超出此閾值的都會算作4900ms,
若需要變更此上限可以通過啟動配置項-Dcsp.sentinel.statistic.max.rt=xxx來配置
測試
我們在Sentinel DashBoard界面點擊熔斷規則,然后按照下圖配置新增慢調用比例的熔斷規則。
如下所示
然后我們在瀏覽器訪問http://localhost:8990/test/hello,連續快速刷新該請求,可以看到服務被熔斷。30s后自動恢復
我們本次使用的Sentinel版本是1.8.2,在1.8之前的版本慢調用比例就是RT,
慢調用相較于之前的RT加入了比例閾值,相當于多加了一個條件。
慢調用比例的熔斷時機:在統計時長內,請求數大于5個,如若大于指定比例閾值的請求數的響應時間都大于最大RT,
那么會熔斷該服務,熔斷時間為設置的熔斷時長
異常比例
概念
異常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):當資源的每秒請求量 >= N(可配置),
并且每秒異常總數占通過量的比值超過閾值(DegradeRule 中的 count)之后,
資源進入降級狀態,即在接下的時間窗口(DegradeRule 中的 timeWindow,以 s 為單位)之內,
對這個方法的調用都會自動地返回。
異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%。
測試
相較于慢調用比例,異常比例就簡單了,通過修改或者新增熔斷規則我們可以發現當我們選擇異常比例時,
只是比慢調用比例少了一個RT。
我們按照下圖所示配置異常比例的熔斷規則,如下所示:
為了演示異常我們修改下TestController.java中的/test/hello方法。
如下所示:
@RequestMapping("/hello") public String sayHello(Integer id){ log.info("Hello, Sentinel!"); if(id < 0){ throw new RuntimeException(); } return "Hello, Sentinel!"; }
然后我們在瀏覽器訪問http://localhost:8990/test/hello?id=-1,連續快速刷新該請求,
當請求數大于5個且異常比例閾值大于0.1時就會自動熔斷
這是一個拼手速的實驗,點擊速度慢的小伙伴可以把統計時長調長一些(默認最大為4900ms)
異常數
概念
異常數 (DEGRADE_GRADE_EXCEPTION_COUNT):當資源近 1 分鐘的異常數目超過閾值之后會進行熔斷。
注意由于統計時間窗口是分鐘級別的,若 timeWindow 小于 60s,
則結束熔斷狀態后仍可能再進入熔斷狀態。
測試
相比于前面兩個異常數就更簡單了,我們按下圖所示修改熔斷規則。
如圖所示:
還是使用測試異常比例的demo進行演示這個效果,我們在瀏覽器狂刷請求http://localhost:8990/test/hello?id=-1,
放異常數達到5個后就會自動熔斷該服務了。
如下圖所示:
以上就是Sentinel熔斷規則原理示例詳解分析的詳細內容,更多關于Sentinel熔斷規則的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/bbxylqf126com/article/details/119798018