javascript
Spring Cloud Alibaba:Sentinel 熔断降级
1. 前言
Sentinel版本:1.8.0
1.8.0 對熔斷特性做了大量升級,低于此版本的謹慎參考
2. 熔斷策略
2.1 慢調用比例
最大 RT(即最大的響應時間):請求的響應時間大于RT則統計為慢調用。
當單位統計時長(默認1秒)內,請求數目大于設置的最小請求數目,并且慢調用的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。
經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求響應時間小于設置的慢調用 RT 則結束熔斷,若大于設置的慢調用 RT 則會再次被熔斷。
測試例子:
寫一個接口,通過sleep參數來決定是否睡眠1秒。
傳 true 則觸發睡眠,請求時間 > RT
傳 false 則直接返回,請求時間 < RT
- 在瀏覽器快速多次打開 /order1?sleep=true ,觸發熔斷
- 然后再調用的時候,直接報錯 Blocked by Sentinel (flow limiting)
- 等待幾秒,熔斷時間過后。如果再次調用 /order1?sleep=true,則又會觸發熔斷;如果是調用/order1?sleep=false,則結束熔斷,恢復正常。
2.2 異常比例
當單位統計時長(statIntervalMs)內請求數目大于設置的最小請求數,并且異常的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%。
整個邏輯跟上一步的慢調用比例基本類似,這里就不再畫圖了
測試例子:
修改上面的接口,通過error判斷是否拋出異常
@GetMapping("/order1")public String order1(boolean error) throws Exception {if (error){throw new Exception("拋出異常");}return "order1";}- 在瀏覽器快速訪問 /order1?error=true,直到顯示Blocked by Sentinel (flow limiting)
- 靜等幾秒,熔斷時間過后
- 如果再次調用 /order1?error=true,則又會觸發熔斷;如果是調用/order1?error=false,則結束熔斷,恢復正常。
2.3 異常數
當單位統計時長內異常數目超過閾值之后會自動進行熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。
3. 注意事項
異常降級僅針對業務異常,對 Sentinel 限流降級本身的異常(BlockException)不生效
總結
以上是生活随笔為你收集整理的Spring Cloud Alibaba:Sentinel 熔断降级的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud Alibaba
- 下一篇: Spring Cloud Alibaba