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