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

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

 更新時(shí)間:2023年09月12日 11:24:48   作者:Heloise_yangyuchang  
這篇文章主要介紹了Spring中的Sentinel熔斷降級(jí)原理詳解,熔斷是為了起到保護(hù)作用,如果某個(gè)目標(biāo)服務(wù)調(diào)用比較慢或者大量的超時(shí),這個(gè)時(shí)候如果觸發(fā)熔斷機(jī)制,則可以保證后續(xù)的請(qǐng)求不會(huì)繼續(xù)發(fā)送到目標(biāo)服務(wù)上,而是直接返回降級(jí)的邏輯并且快速釋放資源,需要的朋友可以參考下

一、概述

對(duì)于熔斷這個(gè)概念,我們并不陌生,比如股市熔斷機(jī)制,當(dāng)股指波幅達(dá)到規(guī)定的熔斷點(diǎn)時(shí),交易所為控制風(fēng)險(xiǎn)采取的暫停交易措施。亦或者是電流熔斷,當(dāng)通過的電流超出導(dǎo)線所能成再的最大電流時(shí),會(huì)觸發(fā)保險(xiǎn)絲熔斷,從而避免因?yàn)殡娏鬟^大造成火災(zāi)。

在這些場(chǎng)景中,可以發(fā)現(xiàn)一個(gè)共同的特點(diǎn),就是熔斷在這些場(chǎng)景中都是充當(dāng)保護(hù)機(jī)制,避免引發(fā)更大的問題。那么在整個(gè)微服務(wù)架構(gòu)中,也同樣會(huì)存在類似的問題。

二、服務(wù)熔斷

在微服務(wù)架構(gòu)中,一個(gè)請(qǐng)求過來,可能會(huì)經(jīng)過多個(gè)服務(wù)進(jìn)行處理,導(dǎo)致整個(gè)處理鏈路會(huì)比較長(zhǎng)。而在整條調(diào)用鏈路中,可能會(huì)因?yàn)槟硞€(gè)節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)故障導(dǎo)致響應(yīng)時(shí)間比較長(zhǎng),而這個(gè)節(jié)點(diǎn)的阻塞將會(huì)影響這條鏈路的結(jié)果返回。 當(dāng)訪問量比較高的請(qǐng)求下,一個(gè)后端依賴節(jié)點(diǎn)的延遲響應(yīng)可能導(dǎo)致所有服務(wù)器上的所有資源在數(shù)秒內(nèi)飽和。一旦出現(xiàn)這個(gè)問題,會(huì)導(dǎo)致系統(tǒng)資源被快速消耗,從而導(dǎo)致服務(wù)宕機(jī)等問題,最壞的情況會(huì)導(dǎo)致服務(wù)雪崩。

為了防止這種問題的產(chǎn)生,也引入了熔斷的概念。

所以,熔斷的意義:是為了起到保護(hù)作用,如果某個(gè)目標(biāo)服務(wù)調(diào)用比較慢或者大量的超時(shí),這個(gè)時(shí)候如果觸發(fā)熔斷機(jī)制,則可以保證后續(xù)的請(qǐng)求不會(huì)繼續(xù)發(fā)送到目標(biāo)服務(wù)上,而是直接返回降級(jí)的邏輯并且快速釋放資源。如果目標(biāo)服務(wù)的情況恢復(fù)了,那么熔斷機(jī)制又會(huì)動(dòng)態(tài)進(jìn)行關(guān)閉。

三、Sentinel中熔斷

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í)后,在接下來的降級(jí)時(shí)間窗口之內(nèi),對(duì)該資源的調(diào)用都自動(dòng)熔斷。

在Sentinel中判斷資源是否處于穩(wěn)定狀態(tài)的指標(biāo)或者緯度:

  • 慢調(diào)用比例(SLOW_REQUEST_RATIO)
  • 異常比例(ERROR_RATIO)
  • 異常數(shù)(ERROR_COUNT)

Sentinel中提供了DegradeRule對(duì)象來實(shí)現(xiàn)規(guī)則設(shè)置,核心屬性如下:

  • resource,資源名稱
  • count, 閾值,[異常比例/異常數(shù)模式下為對(duì)應(yīng)的閾值,慢調(diào)用比例模式下為慢調(diào)用臨 界 RT]
  • grade,熔斷模式,根據(jù)RT降級(jí)、根據(jù)異常比例、根據(jù)異常數(shù)量
  • timeWindow,熔斷時(shí)間,單位為秒

3.1、慢調(diào)用比例(SLOW_REQUEST_RATIO)

在一定請(qǐng)求次數(shù)中,一段時(shí)間內(nèi),如果有一定比例的請(qǐng)求響應(yīng)時(shí)間大于某一個(gè)閾值,則認(rèn)為目標(biāo)服務(wù)異常,則在接下來的指定時(shí)間內(nèi),請(qǐng)求都會(huì)被自動(dòng)熔斷。當(dāng)經(jīng)過熔斷時(shí)長(zhǎng)后,熔斷器會(huì)進(jìn)入到探測(cè)恢復(fù)狀態(tài),若接下來的一個(gè)請(qǐng)求響應(yīng)時(shí)間小于設(shè)置的慢調(diào)用 RT 則結(jié)束熔斷,若大于設(shè)置的慢調(diào)用 RT 則會(huì)再次被熔斷。

參數(shù)設(shè)置(1s內(nèi)連續(xù)發(fā)送10個(gè)請(qǐng)求,在1分鐘以內(nèi),其中20%的請(qǐng)求平均響應(yīng)時(shí)間都超過3s,則觸發(fā)熔斷,熔斷時(shí)間為5s)

DegradeRule rule = new DegradeRule(RESOURCE_KEY)
 .setGrade(CircuitBreakerStrategy.SLOW_REQUEST_RATIO.getType())
// Max allowed response time
 .setCount(3000)
// Retry timeout (in second)
 .setTimeWindow(5)
// Circuit breaker opens when slow request ratio > 20%
 .setSlowRatioThreshold(0.2)
 .setMinRequestAmount(10)
 .setStatIntervalMs(60000);
  • grade=CircuitBreakerStrategy.SLOW_REQUEST_RATIO, (熔斷模式)
  • count=3000,最大的響應(yīng)時(shí)間,單位為(毫秒)
  • TimeWindow=5 (單位為s)
  • minRequestAmount=5,最小請(qǐng)求數(shù)量,請(qǐng)求數(shù)量小于這個(gè)值,即時(shí)異常比例超出閾值也不會(huì)熔斷,默認(rèn)是5次。
  • slowRatioThreshold=0.2,慢調(diào)用比例閾值,僅僅在慢調(diào)用比例模式下有效。
  • statIntervalMs=1000*60, 統(tǒng)計(jì)時(shí)長(zhǎng)為60秒,默認(rèn)為1秒

3.2、異常比例 (ERROR_RATIO)

當(dāng)資源的每秒請(qǐng)求量 >= 5,并且每秒異??倲?shù)占通過量的比值超過閾值時(shí),則觸發(fā)熔斷,配置方式如下

  1. grade=CircuitBreakerStrategy.ERROR_RATIO
  2. count(異常比例),范圍[0.0 , 1.0],代表0%~100%
  3. TimeWindow=5 (單位為s)
  4. minRequestAmount,最小請(qǐng)求數(shù)量,請(qǐng)求數(shù)量小于這個(gè)值,即時(shí)異常比例超出閾值也不會(huì)熔斷,默認(rèn)是5次。

3.3、異常數(shù)量(ERROR_COUNT)

當(dāng)單位統(tǒng)計(jì)時(shí)長(zhǎng)內(nèi)的異常數(shù)目超過閾值之后會(huì)自動(dòng)進(jìn)行熔斷。經(jīng)過熔斷時(shí)長(zhǎng)后熔斷器會(huì)進(jìn)入探測(cè)恢復(fù)狀態(tài)(HALF-OPEN 狀態(tài)),若接下來的一個(gè)請(qǐng)求成功完成(沒有錯(cuò)誤)則結(jié)束熔斷,否則會(huì)再次被熔斷。

  1. grade=CircuitBreakerStrategy.ERROR_COUNT
  2. count(異常數(shù)量)
  3. timeWindow=5 (熔斷時(shí)間窗口,單位為s)
  4. statIntervalMs=60*1000(統(tǒng)計(jì)時(shí)長(zhǎng),單位為ms)

當(dāng)資源近1 分鐘的異常數(shù)目超過閾值之后會(huì)進(jìn)行熔斷。注意由于統(tǒng)計(jì)時(shí)間窗口是分鐘級(jí)別的,若 timeWindow 小于 60s,則結(jié)束熔斷狀態(tài)后仍可能再進(jìn)入熔斷狀態(tài)。

四、總結(jié)

限流、熔斷和服務(wù)降級(jí)是系統(tǒng)容錯(cuò)的重要設(shè)計(jì)模式,從一定意義上講限流和熔斷也是一種服務(wù)降級(jí)的手段。

熔斷和服務(wù)降級(jí)主要是針對(duì)非核心業(yè)務(wù)功能,而核心業(yè)務(wù)如果流程超過預(yù)估的峰值,就需要進(jìn)行限流。

對(duì)于限流,選擇合理的限流算法很重要,令牌桶算法優(yōu)勢(shì)很明顯,也是使用最多的限流算法。

在系統(tǒng)設(shè)計(jì)的時(shí)候,這些模式需要配合業(yè)務(wù)量的預(yù)估、性能測(cè)試的數(shù)據(jù)進(jìn)行相應(yīng)閾值的配置,而這些閾值最好保存在配置中心,方便實(shí)時(shí)修改。

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

相關(guān)文章

  • Java多線程ForkJoinPool實(shí)例詳解

    Java多線程ForkJoinPool實(shí)例詳解

    這篇文章主要介紹了Java多線程ForkJoinPool實(shí)例詳解,涉及forkjoin框架的相關(guān)內(nèi)容,需要的朋友可以參考下。
    2017-09-09
  • Java有趣好玩的圖形界面開發(fā)八個(gè)案例實(shí)現(xiàn)

    Java有趣好玩的圖形界面開發(fā)八個(gè)案例實(shí)現(xiàn)

    今天使用GUI技術(shù)寫了幾個(gè)練習(xí)的Demo,希望對(duì)大家學(xué)習(xí)圖形用戶界面有所幫助,感興趣的同學(xué)來看看吧,動(dòng)手敲一遍理解更通透
    2022-05-05
  • SpringBoot 中使用RabbtiMq?詳解

    SpringBoot 中使用RabbtiMq?詳解

    這篇文章主要介紹了SpringBoot 中使用RabbtiMq詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • Jmail發(fā)送郵件工具類分享

    Jmail發(fā)送郵件工具類分享

    這篇文章主要為大家分享了Jmail發(fā)送郵件工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA

    Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA

    本篇文章主要介紹了Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA,信息加密后數(shù)據(jù)更安全,需要的朋友可以參考下。
    2016-10-10
  • 如何通過Java監(jiān)聽MySQL數(shù)據(jù)的變化

    如何通過Java監(jiān)聽MySQL數(shù)據(jù)的變化

    對(duì)于二次開發(fā)來說,很大一部分就找找文件和找數(shù)據(jù)庫的變化情況,下面這篇文章主要給大家介紹了關(guān)于如何通過Java監(jiān)聽MySQL數(shù)據(jù)的變化的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Java super關(guān)鍵字用法實(shí)戰(zhàn)案例分析

    Java super關(guān)鍵字用法實(shí)戰(zhàn)案例分析

    這篇文章主要介紹了Java super關(guān)鍵字用法,結(jié)合具體案例形式分析了java super關(guān)鍵字調(diào)用父類構(gòu)造方法、屬性及方法等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • 關(guān)于分布式鎖(Redisson)的原理分析

    關(guān)于分布式鎖(Redisson)的原理分析

    這篇文章主要介紹了關(guān)于分布式鎖(Redisson)的原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏詳解

    SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏詳解

    這篇文章主要介紹了SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏詳解,因?yàn)榘咐a用到了hutool提供的DesensitizedUtil數(shù)據(jù)脫敏工具類,這里要引入hutool的依賴,如果你需要自定義 數(shù)據(jù)脫敏的邏輯,可以不引入這個(gè)依賴,需要的朋友可以參考下
    2024-01-01
  • 基于maven中多個(gè)子模塊的構(gòu)建順序

    基于maven中多個(gè)子模塊的構(gòu)建順序

    這篇文章主要介紹了maven中多個(gè)子模塊的構(gòu)建順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論