手把手带你领略双十一背后的核心技术Sentinel之服务的熔断降级
這種日子該到頭了{這種日子該到頭了}這種日子該到頭了
代碼來自:https://blog.csdn.net/Kevinnsm/article/details/117520719?spm=1001.2014.3001.5501
文章目錄
- 1、為什么要進行服務降級?{1、為什么要進行服務降級?}1、為什么要進行服務降級?
- 2、熔斷策略之慢調(diào)用比例{2、熔斷策略之慢調(diào)用比例}2、熔斷策略之慢調(diào)用比例
- 3、熔斷策略之異常比例{3、熔斷策略之異常比例}3、熔斷策略之異常比例
- 4、熔斷策略之異常數(shù){4、熔斷策略之異常數(shù)}4、熔斷策略之異常數(shù)
1、為什么要進行服務降級?{1、為什么要進行服務降級?}1、為什么要進行服務降級?
現(xiàn)在的微服務架構(gòu)是分布式的,由許多服務組成。服務之間的調(diào)用是錯綜復雜的,比如A調(diào)B,B調(diào)C,C調(diào)D等等;一旦某個模塊出現(xiàn)了問題,可能就會出現(xiàn)級聯(lián)效應,最終導致整個鏈路的不可用是。通過服務降級,將不穩(wěn)定的服務進行熔斷降級,避免整個鏈路的雪崩。這個降級是配置在客戶端!
官網(wǎng)文檔地址:https://sentinelguard.io/zh-cn/docs/circuit-breaking.html
2、熔斷策略之慢調(diào)用比例{2、熔斷策略之慢調(diào)用比例}2、熔斷策略之慢調(diào)用比例
慢調(diào)用比例 (SLOW_REQUEST_RATIO):選擇以慢調(diào)用比例作為閾值,需要設置允許的慢調(diào)用 RT(即最大的響應時間),請求的響應時間大于該值則統(tǒng)計為慢調(diào)用。當單位統(tǒng)計時長(statIntervalMs)內(nèi)請求數(shù)目大于設置的最小請求數(shù)目,并且慢調(diào)用的比例大于閾值,則接下來的熔斷時長內(nèi)請求會自動被熔斷。經(jīng)過熔斷時長后熔斷器會進入探測恢復狀態(tài)(HALF-OPEN 狀態(tài)),若接下來的一個請求響應時間小于設置的慢調(diào)用 RT 則結(jié)束熔斷,若大于設置的慢調(diào)用 RT 則會再次被熔斷。
以上是官網(wǎng)提供的,經(jīng)過我的分析需要滿足兩個條件就會進行服務熔斷降級!
1、請求的響應時間大于RT(設置的最大響應時間
2、單位統(tǒng)計時長內(nèi)請求數(shù)目大于最小請求數(shù)目
實例分析
設置最大RT為200ms,意味著一旦請求響應超過這個時間就會被統(tǒng)計為慢調(diào)用,如果在統(tǒng)計時長1000ms內(nèi)慢調(diào)用的數(shù)量大于了最小請求數(shù)5,則會進行服務的熔斷降級(熔斷時長為2s,過了兩秒后會進行進入探測狀態(tài),若接下來的一個請求的響應時間小于RT,則結(jié)束熔斷;否則繼續(xù)進入熔斷狀態(tài))
設置線程暫停1s,那么由于我上面設置的RT為0.2s,所以每次都會超時。100%會進行熔斷降級
使用JMeter進行測試
零基礎帶你入門JMeter-模擬高并發(fā)接口測試,小白教程!:https://blog.csdn.net/Kevinnsm/article/details/117302197?spm=1001.2014.3001.5501
開始測試
由于我設置的是一直循環(huán)訪問,所以可以得出只要不關閉JMeter,那么/good接口將一直處于熔斷狀態(tài),怎么得出來呢?同時通過瀏覽器訪問
當結(jié)束JMeter,然后通過瀏覽器訪問
3、熔斷策略之異常比例{3、熔斷策略之異常比例}3、熔斷策略之異常比例
異常比例 (ERROR_RATIO):當單位統(tǒng)計時長(statIntervalMs)內(nèi)請求數(shù)目大于設置的最小請求數(shù)目,并且異常的比例大于閾值,則接下來的熔斷時長內(nèi)請求會自動被熔斷。經(jīng)過熔斷時長后熔斷器會進入探測恢復狀態(tài)(HALF-OPEN 狀態(tài)),若接下來的一個請求成功完成(沒有錯誤)則結(jié)束熔斷,否則會再次被熔斷。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%。
也就是滿足兩個條件就會發(fā)生熔斷降級
1、請求數(shù)大于設置得最小請求數(shù)目
2、異常得比例大于設置得閾值
如下圖分析
當在1000ms統(tǒng)計時長內(nèi),如果異常比例大于0.8,且請求數(shù)大于5,則進行熔斷降級
代碼模擬
@GetMapping("/good")public String good() {int a = 1 / 0;log.info("---------->"+Thread.currentThread().getName());return "good";}我故意將其1/0報異常!{我故意將其1/0報異常!}我故意將其1/0報異常!
使用JMeter測試
每次10個請求數(shù),一直循環(huán)訪問{每次10個請求數(shù),一直循環(huán)訪問}每次10個請求數(shù),一直循環(huán)訪問
運行
從響應數(shù)據(jù)可以看出已經(jīng)進入了熔斷狀態(tài)!
循環(huán)訪問過程中從瀏覽器進行訪問
當結(jié)束JMeter循環(huán)訪問,然后瀏覽器訪問,發(fā)現(xiàn)已經(jīng)結(jié)束了熔斷狀態(tài)!
4、熔斷策略之異常數(shù){4、熔斷策略之異常數(shù)}4、熔斷策略之異常數(shù)
異常數(shù) (ERROR_COUNT):當單位統(tǒng)計時長內(nèi)的異常數(shù)目超過閾值之后會自動進行熔斷。經(jīng)過熔斷時長后熔斷器會進入探測恢復狀態(tài)(HALF-OPEN 狀態(tài)),若接下來的一個請求成功完成(沒有錯誤)則結(jié)束熔斷,否則會再次被熔斷。
1、單位統(tǒng)計時長內(nèi)異常數(shù)超過設置的異常數(shù)閾值
2、請求數(shù)大于設置得最小請求數(shù)
如上圖所示,在1000ms內(nèi),如果異常數(shù)大于3,且請求數(shù)大于5;則發(fā)生熔斷降級!
JMeter進行測試,一直循環(huán)訪問
可以看出已經(jīng)熔斷降級,當我停掉JMeter之后,瀏覽器訪問該API報出異常!
總結(jié)
以上是生活随笔為你收集整理的手把手带你领略双十一背后的核心技术Sentinel之服务的熔断降级的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手把手带你领略双十一背后的核心组件Sen
- 下一篇: 手把手带你领略双十一背后的核心技术Sen