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

news2024/12/23 5:39:02

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

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

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

在这里插入图片描述

以下正文开始

文章目录

  • 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关联模式的示例:

// 定义资源关联关系
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详细的其他方面的知识,感谢大佬认真读完支持咯~
在这里插入图片描述

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/531137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SCS【25】单细胞细胞间通信第一部分细胞通讯可视化(CellChat)

桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程&#xff0c;目前整理出来的相关教程目录如下&#xff1a; Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅&#xff0c;述说单细胞测序的前世…

Servlet进阶API、监听器与过滤器

过滤器和监听器是Servlet规范里的两个高级特性&#xff0c; 过滤器的作用是通过对request、response 的修改实现特定的功能&#xff0c;例如请求数据字符编码、IP地址过滤、异常过滤、用户身份认证等。监听器的作用是用于监听Web程序中正在执行的程序&#xff0c; 根据发生的事…

罗德与施瓦茨Rohde Schwarz FSW8 2HZ-8GHZ信号分析仪FSW13收购

罗德与施瓦茨Rohde & Schwarz FSW8 2HZ-8GHZ信号分析仪 附加功能&#xff1a; 10 kHz 偏移&#xff08;1 GHz 载波&#xff09;时的低相位噪声为 –137 dBc (1 Hz) 用于 WCDMA ACLR 测量的 –88 dBc 动态范围&#xff08;带噪声消除&#xff09; 高达 2 GHz 的分析带宽 &…

Camtasia2023.0.1CS电脑录制屏幕动作工具新功能介绍

Camtasia Studio是一款专门录制屏幕动作的工具&#xff0c;它能在任何颜色模式下轻松地记录 屏幕动作&#xff0c;包括影像、音效、鼠标移动轨迹、解说声音等等&#xff0c;另外&#xff0c;它还具有即时播放和编 辑压缩的功能&#xff0c;可对视频片段进行剪接、添加转场效果。…

云原生背景下如何配置 JVM 内存

image.png 背景 前段时间业务研发反馈说是他的应用内存使用率很高&#xff0c;导致频繁的重启&#xff0c;让我排查下是怎么回事&#xff1b; 在这之前我也没怎么在意过这个问题&#xff0c;正好这次排查分析的过程做一个记录。 首先我查看了监控面板里的 Pod 监控&#xff1a;…

指令的运行原理及Linux权限解读

目录 一. 指令的运行原理 二. Linux下的用户 2.1 Linux的用户分类 2.2 用户之间的切换 三. 文件权限的概念 3.1 文件类型 3.2 文件的权限 3.3 ls -l 打印文件全部信息的解读 四. 权限的修改 五. 拥有者和所属组的修改 六. 起始权限问题和权限掩码umask 七. 目录文件…

ArcGIS之克里金插值教学

本文来自&#xff1a;GIS科研实验室 基本概念 1.什么是克里金插值&#xff1f; 克里金插值又称空间局部插值法&#xff0c;是以半变异函数理论和结构分析为基础&#xff0c;在有限区域内对区域化变量进行无偏最优估计的一种方法&#xff0c;是地统计学的主要内容之一。南非矿产…

【消息中间件】RocketMQ消息重复消费场景及解决办法

文章目录 前言那么在什么情况下会发生RocketMQ的消息重复消费呢&#xff1f;消息重复消费的场景大概可以分为生产者端重复消费和消费者端重复消费&#xff0c;那么如何来解决消息的重复消费呢&#xff1f;既然在生产者做幂等性的方案都不是特别靠谱&#xff0c;那就再在消费者端…

信创办公–基于WPS的EXCEL最佳实践系列 (宏的录制)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;宏的录制&#xff09; 目录 应用背景操作步骤1、宏的录制启用2、宏的使用3、宏的保存4、宏的禁用 应用背景 宏是一个自动化完成重复性工作的工具&#xff0c;使用宏可以提高我们的工作效率&#xff0c;那应该怎样使用宏这一…

日志与时间戳,客户端与服务器端,打包压缩解压解包介绍,date,cal,zip,unzip,tar指令等

日志与时间戳 计算机世界里面&#xff0c;时间其实很重要的&#xff0c;首先我们需要有日志这个概念&#xff0c;这个日志其实就跟日记一样&#xff0c;那么在日记里面的话就会有时间。时间真的非常关键&#xff0c;比方在出现问题的时候去找到这个问题出现的时间点&#xff0…

EEPROM读写测试实验(主要记录IIC通信协议)

一、简介 EEPROM&#xff0c;电可擦除可编程只读存储器&#xff0c;是一个非易失性的存储器件。RAM&#xff1a; 随机访问存储器&#xff0c;可读也可写&#xff0c;断电不保存数据&#xff0c;常用的RAM有ddr3、SDRAM。ROM仅支持读&#xff0c;不可写&#xff0c;但断电可以保…

4 通道3.2GSPS(或者配置成2 通道6.4GSPS)采样率的12 位AD 采集FMC+子卡模块

板卡概述 FMC_XM134 是一款4 通道3.2GSPS&#xff08;或者配置成2 通道6.4GSPS&#xff09;采样率的12 位AD 采集FMC子卡模块&#xff0c;该板卡为FMC标准&#xff0c;符合VITA57.4 规范&#xff0c;可以作为一个理想的IO 模块耦合至FPGA 前端&#xff0c;射频模拟信号数字化后…

外网远程访问公司内网用友畅捷通T财务软件 - 远程办公

文章目录 前言1.本地访问简介2. cpolar内网穿透3. 公网远程访问4. 固定公网地址 前言 用友畅捷通T适用于异地多组织、多机构对企业财务汇总的管理需求&#xff1b;全面支持企业对远程仓库、异地办事处的管理需求&#xff1b;全面满足企业财务业务一体化管理需求。企业一般将其…

老胡的周刊(第090期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 privateGPT[2] 为保证数据私密性&#xff0c…

antd——实现不分页的表格前端排序功能——基础积累

最近在写后台管理系统时&#xff0c;遇到一个需求&#xff0c;就是给表格中的某些字段添加排序功能。注意该表格是不分页的&#xff0c;因此排序可以只通过前端处理。 如下图所示&#xff1a; 在antd官网上是有关于表格排序的功能的。 对某一列数据进行排序&#xff0c;通过…

字符串运算公式:muParser公式库在linux平台使用

muParser是一个跨平台的公式解析库,它可以自定义多参数函数,自定义常量、变量及一元前缀、后缀操作符,二元操作符等,它将公式编译成字节码,所以计算起来非常快。 1 、muParser源码下载 官方网址http://sourceforge.net/projects/muparser/ gitee下载地址:Gitee 极速下…

使用国产chatglm推理自己的数据文件_闻达

最近大火的chatgpt&#xff0c;老板说让我看看能不能用自己的数据&#xff0c;回答专业一些&#xff0c;所以做了一些调研&#xff0c;最近用这个倒是成功推理了自己的数据&#xff0c;模型也开源了&#xff0c;之后有机会也训练一下自己的数据。 使用国产chatglm推理自己的数…

【C++】引用重新赋值?

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; 前段时间解决了一个关于引用的bug&#xff0c;原因是引用“重新赋值”造成的&#xff0c;原来的代码逻辑关于队列的选择&#xff0c;为了凸显问题&#xff0c;这里使用一个简单的例子重写。示例代码如下&#xf…

第七章 TensorFlow实现卷积神经网络

7.2TensorFlow实现简单的CNN import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data from tensorflow.python.framework import ops ops.reset_default_graph()# 创建计算图 sess tf.Ses…

SpringBoot及其配置文件

目录 1.SpringBoot简介 2.第一个SpringBoot项目 3.SpringBoot配置文件 3.1 配置文件介绍 3.2 properties配置文件 3.2.1 properties配置文件——写 3.2.2 properties配置文件——读 3.2.3 properties配置文件——缺点 3.3 yml配置文件 3.3.2 yml配置文件——初阶写 …