国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【微服務(wù)筆記21】微服務(wù)組件之Sentinel服務(wù)熔斷、服務(wù)降級、流量控制介紹

這篇具有很好參考價(jià)值的文章主要介紹了【微服務(wù)筆記21】微服務(wù)組件之Sentinel服務(wù)熔斷、服務(wù)降級、流量控制介紹。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

這篇文章,主要介紹微服務(wù)組件之Sentinel服務(wù)熔斷、服務(wù)降級、流量控制。

目錄

一、Sentinel組件

1.1、Sentinel介紹

1.2、Sentinel環(huán)境搭建

(1)引入依賴

(2)資源和規(guī)則

1.3、使用SphU定義資源

(1)定義資源

(2)定義規(guī)則

1.4、使用SphO定義資源

(1)定義資源

(2)定義規(guī)則

1.5、使用@SentinelResource注解定義資源

(1)定義資源

(2)定義規(guī)則

1.6、熔斷降級規(guī)則

(1)案例代碼

(2)五種降級規(guī)則


一、Sentinel組件

1.1、Sentinel介紹

Sentinel是Spring Cloud Alibaba提供的一個(gè)專門用于服務(wù)容錯(cuò)、服務(wù)熔斷、服務(wù)限流的微服務(wù)組件,它和hystrix組件的作用是類似的,但是Sentinel提供的功能比hystrix更加強(qiáng)大,Sentinel分為兩部分,一部分是Sentinel核心庫,另外一部分是Dashboard控制臺,Dashboard控制臺可以查看監(jiān)控的信息,接口的調(diào)用情況等。

sphu sentinel,【微服務(wù)筆記】,微服務(wù),sentinel,Sentinel服務(wù)容錯(cuò),服務(wù)熔斷降級,流量控制

有兩種使用Sentinel組件的方式,分別是:

  • 第一種:引入Sentinel核心庫依賴,然后通過Java代碼的方式編寫流控規(guī)則。
  • 第二種:通過Dashboard控制臺直接添加流控規(guī)則。

1.2、Sentinel環(huán)境搭建

Sentinel可以和很多的框架進(jìn)行整合,并且也可以單獨(dú)的使用,例如:和SpringCloud整合、和SpringBoot整合、Dubbo整合等,這里我就和SpringCloud進(jìn)行整合。

(1)引入依賴

<!-- 引入 web 依賴 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 sentinel 依賴 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

引入sentinel依賴之后,基本的環(huán)境就搭建好了,接下來就是使用Sentinel進(jìn)行流量控制等代碼的編寫。

(2)資源和規(guī)則

在Sentinel中有兩種概念需要了解下,分別是:資源和規(guī)則。

資源就是指項(xiàng)目中的一個(gè)請求資源,可以將一段代碼、一個(gè)方法看作是資源,Sentinel就是以【資源】的形式進(jìn)行流控設(shè)置,定義資源之后,還需要給這個(gè)資源設(shè)置相對應(yīng)的流控規(guī)則,規(guī)則也就是說,這個(gè)資源什么情況下,需要發(fā)生熔斷、降級、限流等等操作呢,這些操作就是規(guī)則。

  • 一般情況下,我們都使用方法名、URL、微服務(wù)名稱作為資源名稱來描述某個(gè)資源。
  • 流量控制、熔斷降級、系統(tǒng)保護(hù)、來源訪問控制、熱點(diǎn)參數(shù)等等規(guī)則。

Sentinel提供了多種資源的定義方式,可以通過【@SentinelResource】注解定義資源,也可以通過Java代碼的方式手動的定義資源。下面分別介紹一下,幾種定義資源和規(guī)則的方式。

1.3、使用SphU定義資源

SphU是Sentinel提供的一個(gè)類,SphU是采用【try...catch】異常的方式來實(shí)現(xiàn)流控配置,當(dāng)發(fā)生流控的時(shí)候,就會拋出一個(gè)BlockException異常。

(1)定義資源

@GetMapping("/sphU")
public String demo01() {
    Entry entry = null;
    try {
        // 1、開啟流控
        entry = SphU.entry("sphU_demo01");
        System.out.println("這里就是執(zhí)行具體業(yè)務(wù)邏輯");
    } catch (BlockException e) {
        e.printStackTrace();
        // 記錄流控異常日志
        Tracer.traceEntry(e, entry);
        // 2、當(dāng)發(fā)生流控的時(shí)候,就會進(jìn)入這個(gè)異常塊里面
        return "Sentinel發(fā)生流控,請稍后重試!";
    } finally {
        if (entry != null) {
            // 3、退出流控
            entry.exit();
        }
    }
    return "接口調(diào)用成功";
}

(2)定義規(guī)則

/**
 * 注入流控規(guī)則
 */
@PostConstruct
private void initFlowRule() {
    List<FlowRule> ruleList = new ArrayList<>();

    // 創(chuàng)建資源對應(yīng)的流控規(guī)則
    FlowRule flowRule = new FlowRule();
    // 設(shè)置當(dāng)前這個(gè)規(guī)則屬于哪個(gè)資源的
    // 注意:不要用錯(cuò)方法,是調(diào)用【serResource()】方法,而不是【serRefResource()】,方法用錯(cuò)后,sentinel流控不生效
    flowRule.setResource("sphU_demo01");
    // 設(shè)置流控規(guī)則類型,這采用 QPS 方式
    flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    // 設(shè)置 QPS 的限制數(shù)量
    flowRule.setCount(1);

    ruleList.add(flowRule);

    // 將流控規(guī)則添加到Sentinel里面
    FlowRuleManager.loadRules(ruleList);
}

啟動工程,然后瀏覽器訪問【/api/sentinel/sphU】接口,連續(xù)多次刷新頁面,此時(shí)就會出現(xiàn)流控情況,從而拋出異常。

sphu sentinel,【微服務(wù)筆記】,微服務(wù),sentinel,Sentinel服務(wù)容錯(cuò),服務(wù)熔斷降級,流量控制

1.4、使用SphO定義資源

SphO也是Sentinel提供的一個(gè)類,它是采用【if...else】的方式來實(shí)現(xiàn)流控,當(dāng)觸發(fā)流控的時(shí)候,對應(yīng)方法會返一個(gè)boolean類型,false表示發(fā)生了流控,我們就可以根據(jù)方法的返回值,進(jìn)行代碼的處理。

(1)定義資源

@GetMapping("/sphO")
public String demo02() {
    boolean entry = SphO.entry("sphO_demo02");
    if (entry) {
        try {
            System.out.println("執(zhí)行具體業(yè)務(wù)邏輯...");
            // 沒有發(fā)生流控,正常執(zhí)行業(yè)務(wù)邏輯代碼
            return "接口調(diào)用成功";
        } finally {
            // 關(guān)閉流控
            SphO.exit();
        }
    } else {
        // 發(fā)生流控
        return "Sentinel發(fā)生流控,請稍后重試!";
    }
}

(2)定義規(guī)則

/**
 * 注入流控規(guī)則
 */
@PostConstruct
public void initFlowRule() {
    List<FlowRule> ruleList = new ArrayList<>();
	
    // 創(chuàng)建資源對應(yīng)的流控規(guī)則
    FlowRule flowRule = new FlowRule();
    flowRule.setResource("sphO_demo02");
    // 設(shè)置當(dāng)前這個(gè)規(guī)則屬于哪個(gè)資源的
    // 設(shè)置流控規(guī)則類型,這采用 QPS 方式
    flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    // 設(shè)置 QPS 的限制數(shù)量
    flowRule.setCount(1);

    ruleList.add(flowRule);

    // 將流控規(guī)則添加到Sentinel里面
    FlowRuleManager.loadRules(ruleList);
}

1.5、使用@SentinelResource注解定義資源

@SentinelResource注解,用于定義資源,這個(gè)注解中有下面這些屬性:

  • value:定義資源名稱。
  • blockHandler:定義流控降級之后調(diào)用的方法。
    • 方法必須定義在同一個(gè)類中。
    • 方法必須是public的。
    • 方法返回值必須和原方法的返回值一致。
    • 方法參數(shù)必須相同,但是最后一個(gè)參數(shù)可以添加一個(gè)異常類參數(shù)。
  • blockHandlerClass:作用和blockHandler一致,只是單獨(dú)寫到一個(gè)類里面了。
  • fallback:當(dāng)對應(yīng)方法拋出異常時(shí)候,會調(diào)用這個(gè)降級方法。

(1)定義資源

package com.gitcode.demo.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @version 1.0.0
 * @Date: 2023/4/25 17:07
 * @Copyright (C) ZhuYouBin
 * @Description:
 */
@RestController
@RequestMapping("/api/sentinel/demo")
public class SentinelDemo {

    @SentinelResource(value = "sentinel_demo", blockHandler = "blockHandlerMethod", fallback = "fallbackMethod")
    @GetMapping("/resource")
    public String demo02() {
        System.out.println("執(zhí)行具體業(yè)務(wù)邏輯...");
        return "接口調(diào)用成功";
    }

    public String blockHandlerMethod() {
        System.out.println("Sentinel發(fā)生流控,請稍后重試!");
        return "Sentinel發(fā)生流控,請稍后重試!";
    }

    public String fallbackMethod(Throwable ex) {
        System.out.println("Sentinel發(fā)生異常,請稍后重試!" + ex.getMessage());
        return "Sentinel發(fā)生異常,請稍后重試!" + ex.getMessage();
    }

}

(2)定義規(guī)則

/**
 * 注入流控規(guī)則
 */
@PostConstruct
public void initFlowRule() {
    List<FlowRule> ruleList = new ArrayList<>();

    // 創(chuàng)建資源對應(yīng)的流控規(guī)則
    FlowRule flowRule3 = new FlowRule();
    // 設(shè)置當(dāng)前這個(gè)規(guī)則屬于哪個(gè)資源的
    flowRule3.setResource("sentinel_demo");
    // 設(shè)置流控規(guī)則類型,這采用 QPS 方式
    flowRule3.setGrade(RuleConstant.FLOW_GRADE_QPS);
    // 設(shè)置 QPS 的限制數(shù)量
    flowRule3.setCount(1);

    ruleList.add(flowRule);

    // 將流控規(guī)則添加到Sentinel里面
    FlowRuleManager.loadRules(ruleList);
}

1.6、熔斷降級規(guī)則

通過Java代碼的方式設(shè)置降級規(guī)則,降級規(guī)則采用【DegradeRule】類表示,通過這個(gè)類設(shè)置一些規(guī)則,然后將其保存到【DegradeRuleManager】類中的緩存里面即可。

(1)案例代碼

/**
 * 服務(wù)降級規(guī)則配置
 */
public void initDegradeRule() {
    List<DegradeRule> degradeRuleList = new ArrayList<>();
    
    // 設(shè)置降級規(guī)則
    DegradeRule rule = new DegradeRule();
    rule.setResource("資源名稱");
    // 指定觸發(fā)降級的規(guī)則類型,有五種
    rule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT);
    // 設(shè)置發(fā)生異常時(shí)候數(shù)量
    rule.setCount(2);
    // 設(shè)置窗口時(shí)間
    rule.setTimeWindow(10);
    // 設(shè)置最小請求數(shù)量
    rule.setMinRequestAmount(2);

    degradeRuleList.add(rule);
    
    // 加載到Sentinel里面
    DegradeRuleManager.loadRules(degradeRuleList);
}

(2)五種降級規(guī)則

  • DEGRADE_GRADE_EXCEPTION_COUNT:在指定時(shí)間內(nèi)發(fā)生的異常次數(shù)降級。
  • DEGRADE_GRADE_EXCEPTION_RATIO:在指定時(shí)間內(nèi)發(fā)生的異常比率降級。
  • DEGRADE_DEFAULT_MIN_REQUEST_AMOUNT:根據(jù)最小請求數(shù)量來實(shí)現(xiàn)降級。
  • DEGRADE_GRADE_RT:根據(jù)響應(yīng)比進(jìn)行降級。
  • DEGRADE_DEFAULT_SLOW_REQUEST_AMOUNT:最慢請求數(shù)量降級。

常用的就只有三個(gè),分別是:異常數(shù)量、異常比率、響應(yīng)比。

綜上,這篇文章結(jié)束了,主要介紹微服務(wù)組件之Sentinel服務(wù)熔斷、服務(wù)降級、流量控制。文章來源地址http://www.zghlxwxcb.cn/news/detail-854884.html

到了這里,關(guān)于【微服務(wù)筆記21】微服務(wù)組件之Sentinel服務(wù)熔斷、服務(wù)降級、流量控制介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Spring Cloud Alibaba】Sentinel 服務(wù)熔斷與流量控制

    【Spring Cloud Alibaba】Sentinel 服務(wù)熔斷與流量控制

    目錄 前言 一、Sentinel 入門 1.1 什么是 Sentinel ? 1.2 微服務(wù)集成 Sentinel ?1.3 安裝Sentinel控制臺 二、Jmeter 壓力測試工具 2.1 Jmeter 介紹? 2.2 Jmeter 安裝 2.3 接口測試 三、Sentinel 使用 3.1 限流規(guī)則 3.1.1 warm up(預(yù)熱模式) 3.1.2?排隊(duì)等待 3.1.3 關(guān)聯(lián) 3.1.4 鏈路 3.2 熔斷規(guī)則 3.3 服務(wù)降級 ????

    2024年02月01日
    瀏覽(28)
  • 【Spring Cloud】Sentinel流量限流和熔斷降級的講解

    【Spring Cloud】Sentinel流量限流和熔斷降級的講解

    ????歡迎來到我的CSDN主頁!???? ??我是Java方文山,一個(gè)在CSDN分享筆記的博主。???? ??推薦給大家我的專欄《Spring Cloud》。???? ??點(diǎn)擊這里,就可以查看我的主頁啦!???? Java方文山的個(gè)人主頁 ??如果感覺還不錯(cuò)的話請給我點(diǎn)贊吧!???? ??期待你的加入,一起

    2024年01月23日
    瀏覽(24)
  • 【微服務(wù)筆記10】微服務(wù)組件之Hystrix實(shí)現(xiàn)服務(wù)降級和服務(wù)熔斷

    【微服務(wù)筆記10】微服務(wù)組件之Hystrix實(shí)現(xiàn)服務(wù)降級和服務(wù)熔斷

    這篇文章,主要介紹微服務(wù)組件之Hystrix實(shí)現(xiàn)服務(wù)降級和服務(wù)熔斷。 目錄 一、服務(wù)降級 1.1、什么是服務(wù)降級 1.2、實(shí)現(xiàn)服務(wù)降級 (1)引入依賴 (2)編寫Service層代碼 (3)編寫Controller層代碼 (4)運(yùn)行測試 (5)fallbackMethod屬性 二、服務(wù)熔斷 2.1、什么是服務(wù)熔斷 2.2、實(shí)現(xiàn)服務(wù)

    2023年04月11日
    瀏覽(22)
  • 流量控制與熔斷利器:Sentinel介紹

    流量控制與熔斷利器:Sentinel介紹

    這是《百圖解碼支付系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》專欄系列文章中的第(19)篇,也是流量控制系列的第(6)篇。點(diǎn)擊上方關(guān)注,深入了解支付系統(tǒng)的方方面面。 本篇聊聊流量控制與熔斷利器Sentinel,背后的原理,適用的場景及存在的不足。不涉及具體的配置,具體配置請參考官方文檔

    2024年01月21日
    瀏覽(24)
  • 聊一聊服務(wù)治理三板斧:限流、熔斷、降級和go-sentinel的實(shí)現(xiàn)

    聊一聊服務(wù)治理三板斧:限流、熔斷、降級和go-sentinel的實(shí)現(xiàn)

    我們知道,對于一個(gè)項(xiàng)目之初,我們不可能上來就按幾千的并發(fā)去配置,為什么?兩個(gè)方面,第一個(gè)是成本高。第二個(gè)是維護(hù)難度大。即便是天貓?zhí)詫氝@種,也是采用的動態(tài)擴(kuò)容的方式來應(yīng)對雙十一。那么一個(gè)項(xiàng)目如何應(yīng)對突然的高并發(fā),我們有哪些常用的措施和處理呢?我

    2024年01月19日
    瀏覽(28)
  • 【微服務(wù)】Feign 整合 Sentinel,深入探索 Sentinel 的隔離和熔斷降級規(guī)則,以及授權(quán)規(guī)則和自定義異常返回結(jié)果

    【微服務(wù)】Feign 整合 Sentinel,深入探索 Sentinel 的隔離和熔斷降級規(guī)則,以及授權(quán)規(guī)則和自定義異常返回結(jié)果

    在前文中,介紹了 Sentinel 的流控模式和流控效果,然而限流只是一種預(yù)防措施,雖然可以盡量避免因?yàn)椴l(fā)問題而引起的服務(wù)故障,但服務(wù)仍然可能因其他因素而發(fā)生故障。為了將這些故障控制在一定范圍內(nèi),以避免雪崩效應(yīng)的發(fā)生,我們需要依賴線程隔離(艙壁模式)和熔

    2024年02月08日
    瀏覽(27)
  • Sentinel 降級、限流、熔斷

    Sentinel 降級、限流、熔斷

    在現(xiàn)代分布式系統(tǒng)中,如何有效地保護(hù)系統(tǒng)免受突發(fā)流量和故障的影響,是每個(gè)開發(fā)人員和架構(gòu)師都需要思考的重要問題。在這樣的背景下,Sentinel作為一個(gè)強(qiáng)大的系統(tǒng)保護(hù)和控制組件,為我們提供了降級、限流、熔斷等多種策略,幫助我們更好地保障系統(tǒng)的穩(wěn)定性和可用性

    2024年01月24日
    瀏覽(23)
  • 【Springcloud】Sentinel熔斷和降級

    【Springcloud】Sentinel熔斷和降級

    服務(wù)的穩(wěn)定是公司可持續(xù)發(fā)展的重要基石,隨著業(yè)務(wù)量的快速發(fā)展,一些平時(shí)正常運(yùn)行的服務(wù),會出現(xiàn)各種突發(fā)狀況,而且在分布式系統(tǒng)中,每個(gè)服務(wù)本身又存在很多不可控的因素,比如線程池處理緩慢,導(dǎo)致請求超時(shí),資源不足,導(dǎo)致請求被拒絕,又甚至直接服務(wù)不可用、

    2024年02月09日
    瀏覽(18)
  • Sentinel的線程隔離和熔斷降級

    Sentinel的線程隔離和熔斷降級

    上一節(jié)整理了Sentinel的限流,限流可以降低微服務(wù)的負(fù)載,避免因?yàn)楦卟l(fā)而故障,進(jìn)而傳遞給其他相關(guān)服務(wù)而引發(fā)服務(wù)雪崩。以上僅為避免服務(wù)故障,而當(dāng)某個(gè)服務(wù)真正故障時(shí),如何處理才能防止服務(wù)雪崩? ? Sentinel支持隔離和降級兩種方案 采用線程隔離,即艙壁模式:

    2024年02月17日
    瀏覽(28)
  • springcloud alibaba sentinel熔斷降級

    springcloud alibaba sentinel熔斷降級

    隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 以流量為切入點(diǎn),從 流量控制、熔斷降級、系統(tǒng)負(fù)載保護(hù) 等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性。 sentinel相當(dāng)于hystrix的升級版,加入了web界面,能夠?qū)崟r(shí)在線的改變流量策略。 Sentinel 分為兩個(gè)部分: 核心庫(J

    2024年01月23日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包