欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring中的Sentinel熔斷降級(jí)詳解

 更新時(shí)間:2023年09月12日 10:13:50   作者:小鐘要學(xué)習(xí)!!!  
這篇文章主要介紹了Spring中的Sentinel熔斷降級(jí)詳解,熔斷降級(jí)是一種保護(hù)系統(tǒng)穩(wěn)定性和可用性的機(jī)制,旨在防止故障的擴(kuò)散和蔓延,提高用戶體驗(yàn)和信任度,需要的朋友可以參考下

1、介紹

Sentinel 提供以下幾種熔斷策略:

  • 慢調(diào)用比例 (SLOW_REQUEST_RATIO):選擇以慢調(diào)用比例作為閾值,需要設(shè)置允許的慢調(diào)用 RT(即最大的響應(yīng)時(shí)間),請(qǐng)求的響應(yīng)時(shí)間大于該值則統(tǒng)計(jì)為慢調(diào)用。當(dāng)單位統(tǒng)計(jì)時(shí)長(zhǎng)(statIntervalMs)內(nèi)請(qǐng)求數(shù)目大于設(shè)置的最小請(qǐng)求數(shù)目,并且慢調(diào)用的比例大于閾值,則接下來(lái)的熔斷時(shí)長(zhǎng)內(nèi)請(qǐng)求會(huì)自動(dòng)被熔斷。經(jīng)過(guò)熔斷時(shí)長(zhǎng)后熔斷器會(huì)進(jìn)入探測(cè)恢復(fù)狀態(tài)(HALF-OPEN 狀態(tài)),若接下來(lái)的一個(gè)請(qǐng)求響應(yīng)時(shí)間小于設(shè)置的慢調(diào)用 RT 則結(jié)束熔斷,若大于設(shè)置的慢調(diào)用 RT 則會(huì)再次被熔斷。
  • 異常比例 (ERROR_RATIO):當(dāng)單位統(tǒng)計(jì)時(shí)長(zhǎng)(statIntervalMs)內(nèi)請(qǐng)求數(shù)目大于設(shè)置的最小請(qǐng)求數(shù)目,并且異常的比例大于閾值,則接下來(lái)的熔斷時(shí)長(zhǎng)內(nèi)請(qǐng)求會(huì)自動(dòng)被熔斷。經(jīng)過(guò)熔斷時(shí)長(zhǎng)后熔斷器會(huì)進(jìn)入探測(cè)恢復(fù)狀態(tài)(HALF-OPEN 狀態(tài)),若接下來(lái)的一個(gè)請(qǐng)求成功完成(沒(méi)有錯(cuò)誤)則結(jié)束熔斷,否則會(huì)再次被熔斷。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%。
  • 異常數(shù) (ERROR_COUNT):當(dāng)單位統(tǒng)計(jì)時(shí)長(zhǎng)內(nèi)的異常數(shù)目超過(guò)閾值之后會(huì)自動(dòng)進(jìn)行熔斷。經(jīng)過(guò)熔斷時(shí)長(zhǎng)后熔斷器會(huì)進(jìn)入探測(cè)恢復(fù)狀態(tài)(HALF-OPEN 狀態(tài)),若接下來(lái)的一個(gè)請(qǐng)求成功完成(沒(méi)有錯(cuò)誤)則結(jié)束熔斷,否則會(huì)再次被熔斷。

注意異常降級(jí)僅針對(duì)業(yè)務(wù)異常,對(duì) Sentinel 限流降級(jí)本身的異常( BlockException )不生效。為了統(tǒng)計(jì)異常比例或異常數(shù),需要通過(guò) Tracer.trace(ex) 記錄業(yè)務(wù)異常。示例:

進(jìn)一步說(shuō)明

Sentinel 熔斷降級(jí)會(huì)在調(diào)用鏈路中某個(gè)資源出現(xiàn)不穩(wěn)定狀態(tài)時(shí)(例如調(diào)用超時(shí)或異常比例升高),對(duì)這個(gè)資源的調(diào)用進(jìn)行限制,讓請(qǐng)求快速失敗,避免影響到其它的資源而導(dǎo)致級(jí)聯(lián)錯(cuò)誤。

當(dāng)資源被降級(jí)后,在接下來(lái)的降級(jí)時(shí)間窗口之內(nèi),對(duì)該資源的調(diào)用都自動(dòng)熔斷(默認(rèn)行為是拋出 DegradeException)。

熔斷有三種狀態(tài),分別為OPEN、HALF_OPEN、CLOSED Hystrix復(fù)習(xí)

半開(kāi)的狀態(tài)系統(tǒng)自動(dòng)去檢測(cè)是否請(qǐng)求有異常,沒(méi)有異常就關(guān)閉斷路器恢復(fù)使用,有異常則繼續(xù)打開(kāi)斷路器不可用。具體可以參考Hystrix

2、降級(jí)策略實(shí)戰(zhàn)

2.1、慢調(diào)用比例策列

業(yè)務(wù)的響應(yīng)時(shí)長(zhǎng)(RT)大于指定時(shí)長(zhǎng)的請(qǐng)求認(rèn)定為慢調(diào)用。在指定時(shí)間內(nèi),如果請(qǐng)求數(shù)量超過(guò)了設(shè)定的最小數(shù)量,慢調(diào)用比例大于設(shè)定的閾值,則觸發(fā)熔斷

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6G6COi5L-1669331553551)(image/197、新增熔斷規(guī)則.png)]

屬性描述

屬性描述
最大RT需要設(shè)置的閾值,超過(guò)該值則為慢調(diào)用
比例閾值慢調(diào)用所占有的調(diào)用比例,范圍[0.0,10.]
熔斷時(shí)長(zhǎng)在這段時(shí)間內(nèi)發(fā)生熔斷、拒絕所有請(qǐng)求,經(jīng)過(guò)熔斷時(shí)長(zhǎng)后熔斷器會(huì)進(jìn)入探測(cè)恢復(fù)狀態(tài)(HALF-OPEN 狀態(tài))
最小請(qǐng)求數(shù)即允許通過(guò)的最小請(qǐng)求數(shù),在該數(shù)量?jī)?nèi)不發(fā)生熔斷

執(zhí)行邏輯

上面慢調(diào)用的執(zhí)行流程解讀:

一個(gè)接口請(qǐng)求響應(yīng)的速度大于【最大RT(200ms),業(yè)務(wù)代碼設(shè)置1秒】,統(tǒng)計(jì)最近10000毫秒內(nèi)的所有請(qǐng)求,如果請(qǐng)求數(shù)量超過(guò)10次,并且慢調(diào)用比例不低于0.4,則觸發(fā)熔斷,熔斷時(shí)長(zhǎng)為【自定義5秒】,然后進(jìn)入half-open狀態(tài),放行一次請(qǐng)求做測(cè)試

  • 熔斷(OPEN):請(qǐng)求數(shù)大于最小請(qǐng)求數(shù)并且慢調(diào)用的比率大于比例閾值則發(fā)生熔斷,熔斷時(shí)長(zhǎng)為用戶自定義設(shè)置。
  • 探測(cè)(HALFOPEN):當(dāng)熔斷過(guò)了定義的熔斷時(shí)長(zhǎng),狀態(tài)由熔斷(OPEN)變?yōu)樘綔y(cè)(HALFOPEN)。

注意Sentinel默認(rèn)統(tǒng)計(jì)的RT上限是4900ms,超出此閾值的都會(huì)算作4900ms,若需要變更此上限可以通過(guò)啟動(dòng)配置項(xiàng)-Dcsp.sentinel.statistic.max.rt=xxx來(lái)配置

添加控制器

請(qǐng)求線程睡眠一秒方便后面的壓測(cè)測(cè)試

@GetMapping("/testD")
public String testD()
{
    //暫停幾秒鐘線程
    try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
    log.info("testD 測(cè)試RT");
    return "------testD";
}

JMeter壓測(cè)

  • 先創(chuàng)建一個(gè)組(1秒發(fā)生10個(gè)請(qǐng)求,并且循環(huán)進(jìn)行,只有點(diǎn)擊停止的時(shí)候才會(huì)停止)
  • 再創(chuàng)建一個(gè)請(qǐng)求

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Z986ir0f-1669331553552)(image/198、啟動(dòng)測(cè)試.png)]

在上面的測(cè)試中在通過(guò)訪問(wèn)://localhost:8401/testD發(fā)現(xiàn)會(huì)出現(xiàn)如下錯(cuò)誤,因?yàn)楸蝗蹟嗔?,?dāng)停止壓測(cè)再請(qǐng)求又可以了

Blocked by Sentinel (flow limiting)

2.2、異常比例

統(tǒng)計(jì)指定時(shí)間內(nèi)的調(diào)用,如果調(diào)用次數(shù)超過(guò)指定請(qǐng)求數(shù),并且出現(xiàn)異常的比例達(dá)到設(shè)定的比例閾值(或超過(guò)指定異常數(shù)),則觸發(fā)熔斷

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ytpvB6bZ-1669331553552)(image/199、異常比例.png)]

解讀

統(tǒng)計(jì)最近1000ms內(nèi)的所有請(qǐng)求,如果請(qǐng)求量超過(guò)5次,并且異常比例不低于0.4,則觸發(fā)熔斷,熔斷時(shí)長(zhǎng)為5秒。然后進(jìn)入half-open狀態(tài),放行異常請(qǐng)求做測(cè)試

修改業(yè)務(wù)代碼報(bào)錯(cuò)

@GetMapping("/testD")
public String testD()
{
    //暫停幾秒鐘線程
    //try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
    // log.info("testD 測(cè)試RT");
    int a = 1/0;
    log.info("testD 異常比例數(shù)觸發(fā)熔斷");
    return "------testD";
}

啟動(dòng)測(cè)試刷新后臺(tái)報(bào)出異常,然后進(jìn)入熔斷輸出內(nèi)容

Blocked by Sentinel (flow limiting)

2.3、異常數(shù)

異常數(shù)與異常比例是一樣的,只是將異常比例閾值指定為具體的異常數(shù)就會(huì)觸發(fā)熔斷

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-bhcWofrX-1669331553553)(image/200、異常數(shù).png)]

在1秒中內(nèi)的請(qǐng)求數(shù),有2次都是異常的就會(huì)觸發(fā)5秒熔斷

到此這篇關(guān)于Spring中的Sentinel熔斷降級(jí)詳解的文章就介紹到這了,更多相關(guān)Sentinel熔斷降級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合PostgreSQL的示例代碼

    SpringBoot整合PostgreSQL的示例代碼

    本文主要介紹了SpringBoot整合PostgreSQL的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 詳解Java構(gòu)建樹(shù)結(jié)構(gòu)的公共方法

    詳解Java構(gòu)建樹(shù)結(jié)構(gòu)的公共方法

    本文主要介紹了詳解Java構(gòu)建樹(shù)結(jié)構(gòu)的公共方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Spring Boot如何使用HikariCP連接池詳解

    Spring Boot如何使用HikariCP連接池詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何使用HikariCP連接池的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java JVM編譯策略案例詳解

    Java JVM編譯策略案例詳解

    這篇文章主要介紹了Java JVM編譯策略案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot和Vue項(xiàng)目服務(wù)器發(fā)布流程分享

    SpringBoot和Vue項(xiàng)目服務(wù)器發(fā)布流程分享

    本文詳細(xì)介紹了如何將SpringBoot和Vue項(xiàng)目發(fā)布到阿里云ECS服務(wù)器上的步驟,包括準(zhǔn)備服務(wù)器、安裝寶塔、配置數(shù)據(jù)庫(kù)、打包項(xiàng)目、上傳文件、設(shè)置端口、安裝軟件和注冊(cè)網(wǎng)站等
    2025-02-02
  • 簡(jiǎn)單學(xué)習(xí)Java API 設(shè)計(jì)實(shí)踐

    簡(jiǎn)單學(xué)習(xí)Java API 設(shè)計(jì)實(shí)踐

    API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件的以訪問(wèn)一組例程的能力,而又無(wú)需訪問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。需要的可以了解一下
    2019-06-06
  • 淺談Java 中的引用類型

    淺談Java 中的引用類型

    Java開(kāi)發(fā)者肯定都很熟悉java中的4種引用類型,它們從強(qiáng)到弱分別是:強(qiáng)引用、軟引用、弱引用和虛引用,下面我們?cè)敿?xì)看看這些引用類型
    2020-02-02
  • SpringBoot如何實(shí)現(xiàn)并發(fā)任務(wù)并返回結(jié)果

    SpringBoot如何實(shí)現(xiàn)并發(fā)任務(wù)并返回結(jié)果

    這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)并發(fā)任務(wù)并返回結(jié)果問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java OpenCV利用KNN算法實(shí)現(xiàn)圖像背景移除

    Java OpenCV利用KNN算法實(shí)現(xiàn)圖像背景移除

    這篇文章主要為大家介紹了Java OpenCV利用K最鄰近(KNN,K-NearestNeighbor)分類算法實(shí)現(xiàn)圖像背景移除的示例代碼,需要的可以參考一下
    2022-01-01
  • 實(shí)現(xiàn)java文章點(diǎn)擊量記錄實(shí)例

    實(shí)現(xiàn)java文章點(diǎn)擊量記錄實(shí)例

    這篇文章主要為大家介紹了實(shí)現(xiàn)java文章點(diǎn)擊量記錄實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評(píng)論