最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的Sentinel熔斷降級原理詳解

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

一、概述

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

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

二、服務(wù)熔斷

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

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

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

三、Sentinel中熔斷

Sentinel 熔斷降級會在調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定狀態(tài)時(例如調(diào)用超時或異常比例升高),對這個資源的調(diào)用進行限制,讓請求快速失敗,避免影響到其它的資源而導(dǎo)致級聯(lián)錯誤。當資源被降級后,在接下來的降級時間窗口之內(nèi),對該資源的調(diào)用都自動熔斷。

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

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

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

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

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

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

參數(shù)設(shè)置(1s內(nèi)連續(xù)發(fā)送10個請求,在1分鐘以內(nèi),其中20%的請求平均響應(yīng)時間都超過3s,則觸發(fā)熔斷,熔斷時間為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)時間,單位為(毫秒)
  • TimeWindow=5 (單位為s)
  • minRequestAmount=5,最小請求數(shù)量,請求數(shù)量小于這個值,即時異常比例超出閾值也不會熔斷,默認是5次。
  • slowRatioThreshold=0.2,慢調(diào)用比例閾值,僅僅在慢調(diào)用比例模式下有效。
  • statIntervalMs=1000*60, 統(tǒng)計時長為60秒,默認為1秒

3.2、異常比例 (ERROR_RATIO)

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

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

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

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

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

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

四、總結(jié)

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

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

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

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

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

相關(guān)文章

  • java中帶參數(shù)的try(){}語法含義詳解

    java中帶參數(shù)的try(){}語法含義詳解

    這篇文章主要介紹了java中帶參數(shù)的try(){}語法含義詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring Data Redis中Hash結(jié)構(gòu)操作技巧與最佳實踐

    Spring Data Redis中Hash結(jié)構(gòu)操作技巧與最佳實踐

    本文全面掌握Spring Data Redis中Hash結(jié)構(gòu)的操作技巧與最佳實踐,包括節(jié)省內(nèi)存、支持單字段更新和查詢、原子性操作等,通過SpringDataRedis的opsForHash(),可以方便地進行Hash結(jié)構(gòu)的操作,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • MyBatis配置數(shù)據(jù)庫連接并實現(xiàn)交互的操作步驟

    MyBatis配置數(shù)據(jù)庫連接并實現(xiàn)交互的操作步驟

    這篇文章主要介紹了MyBatis配置數(shù)據(jù)庫連接并實現(xiàn)交互的操作步驟,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-04-04
  • java整合SSM框架的圖文教程

    java整合SSM框架的圖文教程

    下面筆者就為大家分享一篇java整合SSM框架的圖文教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨筆者過來看看吧
    2017-11-11
  • Java使用Thread和Runnable的線程實現(xiàn)方法比較

    Java使用Thread和Runnable的線程實現(xiàn)方法比較

    這篇文章主要介紹了Java使用Thread和Runnable的線程實現(xiàn)方法,結(jié)合實例形式對比分析了Java使用Thread和Runnable實現(xiàn)與使用線程的相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • java實現(xiàn)快速排序的方法

    java實現(xiàn)快速排序的方法

    這篇文章主要介紹了java實現(xiàn)快速排序的方法,涉及java排序的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • Java 異常處理小結(jié),從入門到精通

    Java 異常處理小結(jié),從入門到精通

    這篇文章主要介紹了Java 異常處理小結(jié),從入門到精通,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot實現(xiàn)Redis多數(shù)據(jù)庫切換(多數(shù)據(jù)源配置)

    SpringBoot實現(xiàn)Redis多數(shù)據(jù)庫切換(多數(shù)據(jù)源配置)

    在實際開發(fā)中,隨著業(yè)務(wù)復(fù)雜度提升,我們常常會遇到?Redis?需要按不同業(yè)務(wù)模塊分庫管理的需求,本文將以?Spring?Boot?為例,教大家如何優(yōu)雅地實現(xiàn)?Redis?多數(shù)據(jù)庫(多數(shù)據(jù)源)切換,需要的可以了解下
    2025-07-07
  • 最全MyBatis核心配置文件總結(jié)(收藏)

    最全MyBatis核心配置文件總結(jié)(收藏)

    這篇文章主要介紹了最全MyBatis核心配置文件總結(jié)(收藏),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot整合日志功能(slf4j+logback)詳解(最新推薦)

    SpringBoot整合日志功能(slf4j+logback)詳解(最新推薦)

    Spring使用commons-logging作為內(nèi)部日志,但底層日志實現(xiàn)是開放的,可對接其他日志框架,這篇文章主要介紹了SpringBoot整合日志功能(slf4j+logback)詳解,需要的朋友可以參考下
    2024-08-08

最新評論

德格县| 渝北区| 云霄县| 稻城县| 丰顺县| 龙胜| 富裕县| 绥滨县| 大田县| 准格尔旗| 伊川县| 翁牛特旗| 秦皇岛市| 陇川县| 衡阳市| 新绛县| 筠连县| 友谊县| 醴陵市| 屏东市| 长兴县| 志丹县| 吉林市| 荔浦县| 平邑县| 顺义区| 辉南县| 茌平县| 正安县| 枣强县| 漠河县| 苍山县| 大渡口区| 山东| 诏安县| 寻乌县| 夏津县| 全南县| 长泰县| 青阳县| 淮滨县|