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

Spring?Cloud中Sentinel的兩種限流模式介紹

 更新時(shí)間:2023年05月16日 10:10:39   作者:小威要向諸佬學(xué)習(xí)呀  
如何使用Sentinel做流量控制呢?這篇文章就來為大家詳細(xì)介紹了Spring?Cloud中Sentinel的兩種限流模式,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

Sentinel流控模式

Sentinel流量控制主要有以下幾種模式:

直接失敗模式:在達(dá)到流量控制閾值后,直接拒絕請(qǐng)求,返回錯(cuò)誤信息。

關(guān)聯(lián)模式:當(dāng)關(guān)聯(lián)的資源達(dá)到流量控制閾值時(shí),將觸發(fā)當(dāng)前資源的流量控制。

Warm Up模式:在系統(tǒng)啟動(dòng)時(shí),允許一定量的請(qǐng)求通過,防止出現(xiàn)系統(tǒng)冷啟動(dòng)時(shí)大量請(qǐng)求被拒絕的情況。

排隊(duì)等待模式:在達(dá)到流量控制閾值后,請(qǐng)求將進(jìn)入隊(duì)列等待,直到有資源可用時(shí)再處理請(qǐng)求。

熱點(diǎn)規(guī)則:對(duì)于一些熱點(diǎn)資源,可以設(shè)置特定的流量控制規(guī)則,以防止熱點(diǎn)資源被過多請(qǐng)求占用導(dǎo)致系統(tǒng)崩潰。

說明:由于篇幅原因,本篇文章先介紹前兩種模式,即直接失敗模式和關(guān)聯(lián)模式。

直接失敗模式

Sentinel的直接失敗模式是一種流量控制策略,它可以在系統(tǒng)達(dá)到預(yù)設(shè)的流量閾值時(shí)直接拒絕請(qǐng)求,而不是將請(qǐng)求放入隊(duì)列等待處理。該模式可以避免系統(tǒng)資源過度消耗,并且可以快速響應(yīng)請(qǐng)求,提高系統(tǒng)的可用性。

具體來說,Sentinel的直接失敗模式可以通過以下步驟實(shí)現(xiàn):

1.配置流量閾值:在Sentinel中,可以通過配置規(guī)則來設(shè)置系統(tǒng)的流量閾值,例如:每秒最多處理100個(gè)請(qǐng)求。

2.監(jiān)控流量:Sentinel會(huì)監(jiān)控系統(tǒng)的流量,當(dāng)流量達(dá)到預(yù)設(shè)的閾值時(shí),Sentinel會(huì)觸發(fā)流量控制策略。

3.直接拒絕請(qǐng)求:在直接失敗模式下,當(dāng)流量達(dá)到閾值時(shí),Sentinel會(huì)直接拒絕請(qǐng)求,并返回錯(cuò)誤信息給客戶端,而不是將請(qǐng)求放入隊(duì)列等待處理。

4.統(tǒng)計(jì)流量:Sentinel會(huì)統(tǒng)計(jì)系統(tǒng)的流量情況,并根據(jù)配置的規(guī)則進(jìn)行限流,以保證系統(tǒng)的穩(wěn)定性和可用性。

首先,我們需要添加Sentinel依賴:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

然后,在啟動(dòng)類上添加@EnableSentinel注解啟用Sentinel:

@SpringBootApplication
@EnableSentinel
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

接下來,我們定義一個(gè)Controller,其中包含一個(gè)需要進(jìn)行流量控制的方法:

@RestController
public class DemoController {
    @GetMapping("/hello")
    @SentinelResource(value = "hello", fallback = "fallback")
    public String hello() {
        return "Hello, World!";
    }
    public String fallback() {
        return "Sorry, the service is busy, please try again later.";
    }
}

在上面的代碼中,我們使用@SentinelResource注解標(biāo)記了hello()方法,并指定了一個(gè)fallback方法。當(dāng)Sentinel進(jìn)行流量控制并觸發(fā)熔斷時(shí),會(huì)自動(dòng)調(diào)用fallback方法返回一個(gè)固定的響應(yīng)。

接下來,我們需要在Sentinel Dashboard中配置流量控制規(guī)則。打開Dashboard,進(jìn)入流控規(guī)則頁面,添加一個(gè)新的規(guī)則,將控制臺(tái)模式設(shè)置為直接失敗,并設(shè)置閾值和時(shí)間窗口等參數(shù)。保存規(guī)則后,我們就可以開始測試了。

當(dāng)流量超過閾值時(shí),Sentinel會(huì)拒絕請(qǐng)求并返回一個(gè)固定的響應(yīng),即fallback方法中定義的響應(yīng)。這就是Sentinel的直接失敗模式。

關(guān)聯(lián)模式

Sentinel的關(guān)聯(lián)模式是一種流量控制策略,它可以根據(jù)不同的資源之間的關(guān)聯(lián)關(guān)系來進(jìn)行流量控制。比如,如果一個(gè)接口的訪問頻率過高,可能會(huì)導(dǎo)致其所依賴的其他接口也受到影響,此時(shí)就可以使用關(guān)聯(lián)模式來控制流量。

關(guān)聯(lián)模式的實(shí)現(xiàn)需要定義資源之間的關(guān)聯(lián)關(guān)系,并為每個(gè)資源設(shè)置獨(dú)立的流控規(guī)則。在實(shí)際使用中,可以通過配置文件或代碼來定義關(guān)聯(lián)關(guān)系和流控規(guī)則。

以下是一個(gè)使用代碼實(shí)現(xiàn)Sentinel關(guān)聯(lián)模式的示例:

// 定義資源關(guān)聯(lián)關(guān)系
private static final String RESOURCE_A = "resourceA";
private static final String RESOURCE_B = "resourceB";
private static final String RESOURCE_C = "resourceC";

// 定義流控規(guī)則
private static final FlowRule RULE_A = new FlowRule(RESOURCE_A)
    .setCount(10) // 每秒最多處理10個(gè)請(qǐng)求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);
private static final FlowRule RULE_B = new FlowRule(RESOURCE_B)
    .setCount(20) // 每秒最多處理20個(gè)請(qǐng)求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);
private static final FlowRule RULE_C = new FlowRule(RESOURCE_C)
    .setCount(30) // 每秒最多處理30個(gè)請(qǐng)求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);

// 定義資源關(guān)聯(lián)關(guān)系
private static final Set<FlowRule> RULES_A = new HashSet<>();
private static final Set<FlowRule> RULES_B = new HashSet<>();
private static final Set<FlowRule> RULES_C = new HashSet<>();
static {
    RULES_A.add(RULE_A);
    RULES_A.add(RULE_B);
    RULES_B.add(RULE_B);
    RULES_C.add(RULE_C);
}

// 注冊(cè)流控規(guī)則
FlowRuleManager.loadRules(RULES_A);
FlowRuleManager.loadRules(RULES_B);
FlowRuleManager.loadRules(RULES_C);

// 定義資源關(guān)聯(lián)關(guān)系
DegradeRule degradeRuleA = new DegradeRule(RESOURCE_A)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(5) // 每秒最多處理5個(gè)異常
    .setTimeWindow(10); // 統(tǒng)計(jì)時(shí)間窗口為10秒
DegradeRule degradeRuleB = new DegradeRule(RESOURCE_B)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(10) // 每秒最多處理10個(gè)異常
    .setTimeWindow(10); // 統(tǒng)計(jì)時(shí)間窗口為10秒
DegradeRule degradeRuleC = new DegradeRule(RESOURCE_C)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(15) // 每秒最多處理15個(gè)異常
    .setTimeWindow(10); // 統(tǒng)計(jì)時(shí)間窗口為10秒

// 定義資源關(guān)聯(lián)關(guān)系
private static final Set<DegradeRule> DEGRADE_RULES_A = new HashSet<>();
private static final Set<DegradeRule> DEGRADE_RULES_B = new HashSet<>();
private static final Set<DegradeRule> DEGRADE_RULES_C = new HashSet<>();
static {
    DEGRADE_RULES_A.add(degradeRuleA);
    DEGRADE_RULES_A.add(degradeRuleB);
    DEGRADE_RULES_B.add(degradeRuleB);
    DEGRADE_RULES_C.add(degradeRuleC);
}

// 注冊(cè)降級(jí)規(guī)則
DegradeRuleManager.loadRules(DEGRADE_RULES_A);
DegradeRuleManager.loadRules(DEGRADE_RULES_B);
DegradeRuleManager.loadRules(DEGRADE_RULES_C);

在上面的代碼中,我們定義了三個(gè)資源:RESOURCE_A、RESOURCE_B、RESOURCE_C,并為每個(gè)資源設(shè)置了獨(dú)立的流控規(guī)則和降級(jí)規(guī)則。同時(shí),我們還定義了資源之間的關(guān)聯(lián)關(guān)系,即RESOURCE_A和RESOURCE_B關(guān)聯(lián),RESOURCE_B和RESOURCE_C關(guān)聯(lián)。

通過這種方式,當(dāng)RESOURCE_A的流量達(dá)到限制時(shí),Sentinel會(huì)自動(dòng)觸發(fā)降級(jí)操作,從而避免RESOURCE_B和RESOURCE_C受到影響。同樣地,當(dāng)RESOURCE_B的流量達(dá)到限制時(shí),Sentinel會(huì)自動(dòng)觸發(fā)降級(jí)操作,從而避免RESOURCE_C受到影響。

到此這篇關(guān)于Spring Cloud中Sentinel的兩種限流模式介紹的文章就介紹到這了,更多相關(guān)Spring Cloud Sentinel限流模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring緩存自定義resolver的方法

    spring緩存自定義resolver的方法

    這篇文章主要為大家詳細(xì)介紹了spring緩存自定義resolver的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • IDEA中Directory創(chuàng)建多級(jí)目錄的實(shí)現(xiàn)

    IDEA中Directory創(chuàng)建多級(jí)目錄的實(shí)現(xiàn)

    本文主要介紹了IDEA中Directory創(chuàng)建多級(jí)目錄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Maven設(shè)置JDK版本的兩種方法實(shí)現(xiàn)

    Maven設(shè)置JDK版本的兩種方法實(shí)現(xiàn)

    本文主要介紹了Maven設(shè)置JDK版本的兩種方法實(shí)現(xiàn),是通過Apache Maven Compiler Plugin插件實(shí)現(xiàn)的,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 解決一個(gè)JSON反序列化問題的辦法(空字符串變?yōu)榭占?

    解決一個(gè)JSON反序列化問題的辦法(空字符串變?yōu)榭占?

    在平時(shí)的業(yè)務(wù)開發(fā)中,經(jīng)常會(huì)有拿到一串序列化后的字符串要來反序列化,下面這篇文章主要給大家介紹了如何解決一個(gè)JSON反序列化問題的相關(guān)資料,空字符串變?yōu)榭占?需要的朋友可以參考下
    2024-03-03
  • 基于Java的guava開源庫工具類

    基于Java的guava開源庫工具類

    guava是谷歌基于java封裝好的開源庫,這篇文章主要通過介紹幾個(gè)好用的guava工具類,感興趣的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • springsecurity實(shí)現(xiàn)登錄驗(yàn)證以及根據(jù)用戶身份跳轉(zhuǎn)不同頁面

    springsecurity實(shí)現(xiàn)登錄驗(yàn)證以及根據(jù)用戶身份跳轉(zhuǎn)不同頁面

    Spring?Security是一種基于Spring框架的安全技術(shù),用于實(shí)現(xiàn)身份驗(yàn)證和訪問控制,本文介紹了如何使用Spring?Security,結(jié)合session和redis來存儲(chǔ)用戶信息,并通過編寫特定的登錄處理類和Web配置,實(shí)現(xiàn)用戶登錄和注銷功能
    2024-09-09
  • spring security的BCryptPasswordEncoder加密和對(duì)密碼驗(yàn)證的原理分析

    spring security的BCryptPasswordEncoder加密和對(duì)密碼驗(yàn)證的原理分析

    文章介紹了加密算法和hash算法的基本概念,以及BCryptPasswordEncoder加密和解密的原理,加密算法是可逆的,需要加鹽以保證安全性,BCryptPasswordEncoder通過生成鹽值并在加密和解密過程中使用,確保相同的明文每次加密結(jié)果不同,從而提高安全性
    2024-11-11
  • Java連接Redis全過程講解

    Java連接Redis全過程講解

    這篇文章主要介紹了Java連接Redis全過程講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java動(dòng)態(tài)規(guī)劃之硬幣找零問題實(shí)現(xiàn)示例

    Java動(dòng)態(tài)規(guī)劃之硬幣找零問題實(shí)現(xiàn)示例

    本文主要介紹了Java動(dòng)態(tài)規(guī)劃之硬幣找零問題實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • SpringBoot如何優(yōu)雅地處理全局異常詳解

    SpringBoot如何優(yōu)雅地處理全局異常詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot如何優(yōu)雅地處理全局異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

白银市| 武川县| 庆阳市| 徐汇区| 镇远县| 阳春市| 高邮市| 岳普湖县| 龙海市| 镇巴县| 乌恰县| 天全县| 萨嘎县| 永新县| 樟树市| 乐安县| 金门县| 无锡市| 成都市| 璧山县| 紫金县| 冷水江市| 肇源县| 木兰县| 正镶白旗| 石景山区| 洪洞县| 白河县| 盘山县| 玉树县| 垣曲县| 玉溪市| 商城县| 江永县| 灵寿县| 新龙县| 临沧市| 宁国市| 合阳县| 梁山县| 佳木斯市|