如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

这篇具有很好参考价值的文章主要介绍了如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的两种限流模式,由于篇幅原因,后续文章将详细介绍Sentinel的其他三种。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

以下正文开始

如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

Sentinel流控模式

Sentinel流量控制主要有以下几种模式:

  1. 直接失败模式:在达到流量控制阈值后,直接拒绝请求,返回错误信息。

  2. 关联模式:当关联的资源达到流量控制阈值时,将触发当前资源的流量控制。

  3. Warm Up模式:在系统启动时,允许一定量的请求通过,防止出现系统冷启动时大量请求被拒绝的情况。

  4. 排队等待模式:在达到流量控制阈值后,请求将进入队列等待,直到有资源可用时再处理请求。

  5. 热点规则:对于一些热点资源,可以设置特定的流量控制规则,以防止热点资源被过多请求占用导致系统崩溃。

说明:由于篇幅原因,本篇文章先介绍前两种模式,即直接失败模式和关联模式。

直接失败模式

Sentinel的直接失败模式是一种流量控制策略,它可以在系统达到预设的流量阈值时直接拒绝请求,而不是将请求放入队列等待处理。该模式可以避免系统资源过度消耗,并且可以快速响应请求,提高系统的可用性。

具体来说,Sentinel的直接失败模式可以通过以下步骤实现:

  1. 配置流量阈值:在Sentinel中,可以通过配置规则来设置系统的流量阈值,例如:每秒最多处理100个请求。

  2. 监控流量:Sentinel会监控系统的流量,当流量达到预设的阈值时,Sentinel会触发流量控制策略。

  3. 直接拒绝请求:在直接失败模式下,当流量达到阈值时,Sentinel会直接拒绝请求,并返回错误信息给客户端,而不是将请求放入队列等待处理。

  4. 统计流量:Sentinel会统计系统的流量情况,并根据配置的规则进行限流,以保证系统的稳定性和可用性。

首先,我们需要添加Sentinel依赖:

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

然后,在启动类上添加@EnableSentinel注解启用Sentinel:

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

接下来,我们定义一个Controller,其中包含一个需要进行流量控制的方法:

@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注解标记了hello()方法,并指定了一个fallback方法。当Sentinel进行流量控制并触发熔断时,会自动调用fallback方法返回一个固定的响应

接下来,我们需要在Sentinel Dashboard中配置流量控制规则。打开Dashboard,进入流控规则页面,添加一个新的规则,将控制台模式设置为直接失败,并设置阈值和时间窗口等参数。保存规则后,我们就可以开始测试了。

当流量超过阈值时,Sentinel会拒绝请求并返回一个固定的响应,即fallback方法中定义的响应。这就是Sentinel的直接失败模式。

如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

关联模式

Sentinel的关联模式是一种流量控制策略,它可以根据不同的资源之间的关联关系来进行流量控制。比如,如果一个接口的访问频率过高,可能会导致其所依赖的其他接口也受到影响,此时就可以使用关联模式来控制流量

关联模式的实现需要定义资源之间的关联关系,并为每个资源设置独立的流控规则。在实际使用中,可以通过配置文件或代码来定义关联关系和流控规则。

以下是一个使用代码实现Sentinel关联模式的示例:

// 定义资源关联关系
private static final String RESOURCE_A = "resourceA";
private static final String RESOURCE_B = "resourceB";
private static final String RESOURCE_C = "resourceC";

// 定义流控规则
private static final FlowRule RULE_A = new FlowRule(RESOURCE_A)
    .setCount(10) // 每秒最多处理10个请求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);
private static final FlowRule RULE_B = new FlowRule(RESOURCE_B)
    .setCount(20) // 每秒最多处理20个请求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);
private static final FlowRule RULE_C = new FlowRule(RESOURCE_C)
    .setCount(30) // 每秒最多处理30个请求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);

// 定义资源关联关系
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);
}

// 注册流控规则
FlowRuleManager.loadRules(RULES_A);
FlowRuleManager.loadRules(RULES_B);
FlowRuleManager.loadRules(RULES_C);

// 定义资源关联关系
DegradeRule degradeRuleA = new DegradeRule(RESOURCE_A)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(5) // 每秒最多处理5个异常
    .setTimeWindow(10); // 统计时间窗口为10秒
DegradeRule degradeRuleB = new DegradeRule(RESOURCE_B)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(10) // 每秒最多处理10个异常
    .setTimeWindow(10); // 统计时间窗口为10秒
DegradeRule degradeRuleC = new DegradeRule(RESOURCE_C)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(15) // 每秒最多处理15个异常
    .setTimeWindow(10); // 统计时间窗口为10秒

// 定义资源关联关系
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);
}

// 注册降级规则
DegradeRuleManager.loadRules(DEGRADE_RULES_A);
DegradeRuleManager.loadRules(DEGRADE_RULES_B);
DegradeRuleManager.loadRules(DEGRADE_RULES_C);

在上面的代码中,我们定义了三个资源:RESOURCE_A、RESOURCE_B、RESOURCE_C,并为每个资源设置了独立的流控规则和降级规则。同时,我们还定义了资源之间的关联关系,即RESOURCE_A和RESOURCE_B关联,RESOURCE_B和RESOURCE_C关联。

通过这种方式,当RESOURCE_A的流量达到限制时,Sentinel会自动触发降级操作,从而避免RESOURCE_B和RESOURCE_C受到影响。同样地,当RESOURCE_B的流量达到限制时,Sentinel会自动触发降级操作,从而避免RESOURCE_C受到影响。

好了,本篇文章就先分享到这里了,后续将会继续介绍sentinel详细的其他方面的知识,感谢大佬认真读完支持咯~
如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式文章来源地址https://www.toymoban.com/news/detail-454227.html

到了这里,关于如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Sentinel流量控制与熔断降级

    📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。 💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。 💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者

    2024年02月10日
    浏览(50)
  • sentinel介绍-分布式微服务流量控制

    https://sentinelguard.io/ 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开

    2024年02月16日
    浏览(46)
  • 流量控制与熔断利器:Sentinel介绍

    这是《百图解码支付系统设计与实现》专栏系列文章中的第(19)篇,也是流量控制系列的第(6)篇。点击上方关注,深入了解支付系统的方方面面。 本篇聊聊流量控制与熔断利器Sentinel,背后的原理,适用的场景及存在的不足。不涉及具体的配置,具体配置请参考官方文档

    2024年01月21日
    浏览(44)
  • 利用Sentinel解决雪崩问题(一)流量控制

    1、解决雪崩问题的常见方式有四种: 超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待; 舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离; 熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则

    2024年04月23日
    浏览(74)
  • 【Spring Cloud Alibaba】Sentinel 服务熔断与流量控制

    目录 前言 一、Sentinel 入门 1.1 什么是 Sentinel ? 1.2 微服务集成 Sentinel  1.3 安装Sentinel控制台 二、Jmeter 压力测试工具 2.1 Jmeter 介绍  2.2 Jmeter 安装 2.3 接口测试 三、Sentinel 使用 3.1 限流规则 3.1.1 warm up(预热模式) 3.1.2 排队等待 3.1.3 关联 3.1.4 链路 3.2 熔断规则 3.3 服务降级     

    2024年02月01日
    浏览(70)
  • 实战:Springboot集成Sentinel实现流量控制、熔断降级、负载保护

    前面的文章我们学习了Hystrix并和springboot项目进行了集成,实现服务的熔断降级、隔离措施。但是Hystrix对流量的控制不是很好,仅仅信号量也只能对指定的接口进行限流,至于保护机制Hystrix也只是达到指标进行熔断。那么,有没有一种中间件可以在兼容熔断降级的同时精准实

    2024年02月16日
    浏览(52)
  • 【微服务笔记21】微服务组件之Sentinel服务熔断、服务降级、流量控制介绍

    这篇文章,主要介绍微服务组件之Sentinel服务熔断、服务降级、流量控制。 目录 一、Sentinel组件 1.1、Sentinel介绍 1.2、Sentinel环境搭建 (1)引入依赖 (2)资源和规则 1.3、使用SphU定义资源 (1)定义资源 (2)定义规则 1.4、使用SphO定义资源 (1)定义资源 (2)定义规则 1.5、

    2024年04月17日
    浏览(63)
  • 【RuoYi-Cloud-Plus】学习笔记 08 - Sentinel(三)流量控制知识整理

    打开 Sentinel 官方文档的介绍,概括性的一句话便是: Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 主

    2024年02月12日
    浏览(34)
  • Sentinel nacos spring cloud 持久化配置---分布式/微服务流量控制

    下载地址:https://github.com/alibaba/Sentinel/releases 本次版本:1.8.6 上一篇文章已介绍 我们先说目标,为各位看官节省不匹配的时间 0、使用sentinel流控中心 1、使用nacos做配置中心 5、使用spring-cloud-starter-alibaba-sentinel做持久化配置 https://github.com/OrderDong/microservice-boot 分支:microserv

    2024年02月16日
    浏览(50)
  • Sentinel的另外三种流控模式(附代码详细介绍)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的其他三种流控模式,后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页:小威要向

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包