Sentinel限流规则详解

news2024/9/20 22:49:45

上一期教程讲解了 Sentinel 的快速入门:Sentinel快速入门,这一期主要讲述 Sentinel 的限流规则

簇点链路

簇点链路就是项目内的调用链路(Controller -> Service -> Mapper),链路中被监控的每个接口就是一个资源。默认情况下 Sentinel 会监控 SpringMVC 的每一个端点(Endpoint),因此 SpringMVC 的每一个端点(Endpoint)就是调用链路中的一个资源(这里指的就是 Controller 中的方法)

流控、熔断等都是针对簇点链路中的资源来设置的,因此我们可以点击对应资源后面的按钮来设置规则:

image-20240723132225733

点击后面的流控按钮,就可以弹出表单。表单中可以添加流控规则,如下图所示:

image-20240723132308620

然后,我们在单击阈值的框中填写数字 1 并点击新增按钮,表示限制 /service1/hello 这个资源的单击 QPS 为1,即每秒只允许1次请求,超出的请求会被拦截并报错

之后在浏览器快速刷新对应的页面,结果如下所示,表示限流规则已经生效

image-20240723132556847

流控模式

在添加限流规则时,点击高级选项,可以选择三种流控模式:

image-20240723132703948

三种模式对应的含义是:

1.直接

统计当前资源的请求,触发阈值时对当前资源直接限流,是默认的模式

2.关联

统计与当前资源相关的另一个资源,当另一个资源触发阈值时,对当前资源限流

使用场景:用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是优先支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务限流

例如,对于下图来说,当 /write 资源访问量触发阈值时,就会对 /read 资源限流,避免影响 /write 资源

关联模式

一般来说,满足下面条件就可以使用关联模式:

① 两个有竞争关系的资源
② 一个优先级较高,一个优先级较低

3.链路

统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流

例如,有两条请求链路:

/link1 -> /common
/link2 -> /common

如果只希望统计从 /link2 进入到 /common 的请求,就可以设置链路模式的流控规则

实现步骤:

1.在服务层中填写共同调用的方法

@Service
public class WebServiceImpl implements WebService {

    @Override
    @SentinelResource("/common")
    public void common() {
        System.out.println("调用共同方法");
    }

}

需要注意的是,Sentinel 默认只标记 Controller 中的方法作为资源,如果要标记其它方法,需要利用 @SentinelResource 注解进行标记,参数为对应资源的路径

2.在控制层中,编写两条请求链路方法

@RestController
@RequestMapping("/service1")
public class WebController {

    @Autowired
    private WebService service;

    @GetMapping("/link1")
    public String link1() {
        service.common();
        return "调用链路1";
    }

    @GetMapping("/link2")
    public String link2() {
        service.common();
        return "调用链路2";
    }

}

3.修改配置文件

Sentinel 默认会将 Controller 中所有的方法进行 context 整合,此时会认为所有的 Controller 端点是同一个根链路发展而来的两个子链路,那么最终还是属于一个链路,由于不是两个链路,因此会导致链路模式的流控失效

如下图所示:

image-20240723143120544

此时需要在 application.yml 添加:

spring:
  cloud:
    sentinel:
      web-context-unify: false # 关闭context整合

重新启动后,可以发现变成了两个链路,如下图所示:

image-20240723143926675

4.在控制台设置流控规则,限制从 /service1/link2 进入到 /common 的 QPS 阈值为 2

image-20240723144016213

5.测试

快速在浏览器刷新 link2 的请求,可以得到如下结果,即流控规则已经生效

image-20240723144128389

流控效果

流控效果是指请求达到流控阈值时应该采取的措施,包括三种:

1.快速失败

达到阈值后,新的请求会被立即拒绝并抛出 FlowException 异常。是默认的处理方式

2.wam up

预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值

warm up 是应对服务冷启动(冷启动指的是服务器虽然具有某一 QPS 最大值,但在刚启动时,是无法达到这个最大值的,如果此时请求数较高,即使没有超过最大QPS,服务器也可能因此挂掉)的一种方案。请求阈值初始值是 threshold / coldFactor,threshold 是最大阈值,coldFactor 是冷启动因子。持续指定时长后,逐渐提高到 threshold 值。而 coldFactor 的默认值是 3

预热模式

3.排队等待

让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长

在排队等待中,所有请求都会进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求的等待时间超出最大时长,则会被拒绝

例如,如果 QPS = 5,意味着每 200ms 处理一个队列中的请求;而如果此时 timeout = 2000,则意味着等待超过 2000ms 的请求会被拒绝并抛出异常

排队等待案例

这种效果的好处是,即使请求数量的波动较大,即某段时间请求数量很少,某段时间请求数量很多,从队列中出去的数量也会是稳定的。因此起到流量削峰的作用,对微服务具有一定的保护功能

排队等待

热点参数限流

之前的限流是统计访问某个资源的所有请求,判断是否超过 QPS 阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过 QPS 阈值。这种方式是一种粒度更细的限流,精细到参数级别

例如,在下图中,有四个请求,其中三个请求的参数 id 为1,最后一个请求的参数 id 为 2。此时就可以得出,id 为 1 的 QPS 为 3,id 为 2 的 QPS 为1

热点参数限流

案例:

1.编写控制层代码

这里需要注意的是,热点参数限流对默认的 SpringMVC 资源无效,只有通过 @SentinelResource 注解声明的资源才有效

@RestController
@RequestMapping("/service1")
public class WebController {

    @GetMapping("/hot")
    @SentinelResource("/hot")
    public String hot(String username, String password, Integer age) {
        return "热点";
    }

}

2.在控制台中编写热点规则

image-20240723185922856

image-20240723192317280

该配置代表的含义是,对 /hot 这个资源的第 0 号参数(即第一个参数)做统计,每 10s 相同参数值的请求数不能超过 1

点击高级选项,可以对部分参数进行例外配置。如下图所示

image-20240723190640738

结合之前的配置,表示对第一个参数限流,每 10s 相同参数的 QPS 不能超过 1,但有两个例外:

① 如果参数类型是 String 且 参数值是 123456,则每 1 秒允许的 QPS 为 2
② 如果参数类型是 int 且 参数值是 20,则每 1 秒允许的 QPS 为 3

3.测试

在浏览器输入:localhost:8081/service1/hot?username=张三&password=123456&age=20

测试点主要有三个:

① 快速刷新浏览器,此时结果应为刷新到第二次时就会报错
② 将参数索引修改为 1,此时结果应为刷新到第三次时就会报错
③ 将参数索引修改为 2,此时结果应为刷新到第四次时就会报错

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

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

相关文章

论文阅读【检测】:商汤 ICLR2021 | Deformable DETR

文章目录 论文地址AbstractMotivation技术细节多尺度backbone特征MSDeformAttention 小结 论文地址 Deformable DETR 推荐视频:bilibili Abstract DETR消除对目标检测中许多手工设计的组件的需求,同时表现出良好的性能。然而,由于Transfor…

微服务案例搭建

案例搭建 使⽤微服务架构的分布式系统,微服务之间通过⽹络通信。我们通过服务提供者与服务消费者来描述微服 务间的调⽤关系。 服务提供者:服务的被调⽤⽅,提供调⽤接⼝的⼀⽅ 服务消费者:服务的调⽤⽅,依赖于其他服务的⼀⽅ 我…

pyenv-win | python版本管理,无需卸载当前版本

系统:windows,且已安装git。 使用 pyenv-win 在Windows中管理多个python版本,而无需卸载当前版本。安装步骤如下: 安装 pyenv-win 1. 安装 Git 和 pyenv-win: git clone https://github.com/pyenv-win/pyenv-win.git %USERPRO…

河南萌新联赛2024第(二)场:南阳理工学院

河南萌新联赛2024第(二)场:南阳理工学院 2024.7.24 13:00————15:00 过题数5/11 补题数6/11 国际旅行Ⅰ 国际旅行Ⅰ 小w和大W的决斗。 A*BBBB “好”字符 水灵灵的小学弟 lxy的通风报信 狼狼的备忘录 重生之zbk要拿回属于他的一切 这是签…

THS配置keepalive(yjm)

启动完THS管理控制台和THS后,登录控制台,进入实例管理》节点管理,可以分别使用界面配置和编辑配置设置长连接。 1、界面配置 点击界面配置》集群设置,启用长连接,设置长连接数、最大请求数和超时时间。 2、编辑配置 …

文章自然润色 API 数据接口

文章自然润色 API 数据接口 ai / 文本处理 基于 AI 的文章润色 专有模型 / 智能纠错。 1. 产品功能 基于自有专业模型进行 AI 智能润色对原始内容进行智能纠错高效的文本润色性能全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 / v1.3);全面兼容…

12.Spring事务和事务传播机制

文章目录 1.为什么需要事务2.Spring 中事务的实现2.1 MySQL 中的事务使⽤2.2 Spring 编程式事务2.3 Spring 声明式事务(自动)2.3.1 Transactional 作⽤范围2.3.2 Transactional 参数说明2.3.3 注意事项2.3.4 Transactional ⼯作原理 3.事务隔离级别3.1 事…

Python 爬虫 instagram api获取用户主页tagged media标记内容

此instagramAPI接口可获取指定用户主页tagged media标记内容 详细采集页面参考下图及链接,如有需要,可通过文末链接联系我们。 https://www.instagram.com/javan/tagged/ 请求API http://api.xxxx.com/ins/user/tagged?user_id18527&count12&…

网络原理_初识

目录 一、局域网LAN 二、广域网WAN 三、网络通信基础 3.1 IP地址 3.2 端口号 3.3 协议 3.4 五元组 3.5 OSI七层模型 3.6 TCP/IP五层模型 3.7 网络设备所在分层 3.8 封装和分用 总结 一、局域网LAN 局域网,即 Local Area Network,Local 即标…

基于opencv[python]的人脸检测

1 图片爬虫 这里的代码转载自:http://t.csdnimg.cn/T4R4F # 获取图片数据 import os.path import fake_useragent import requests from lxml import etree# UA伪装 head {"User-Agent": fake_useragent.UserAgent().random}pic_name 0 def request_pic…

FL Studio 21.2.3.4004中文直装版及FL Studio 204如何激活详细教程

在数字化音乐制作的浪潮中,FL Studio 24.1.1.4234的发布无疑又掀起了一股新的热潮。这款由Image-Line公司开发的数字音频工作站(DAW)软件,以其强大的功能和易用的界面,赢得了全球无数音乐制作人的青睐。本文将深入探讨…

ELK日志收集之多文件提取文件名和日志时间

需求:多个设备的日志同时保存在一台服务器上,日志文件的文件名是设备的ID,需要将多个文件提取文件名作为最终的筛选字段,同时提取日志中的时候日期时间替换系统的timestamp filebeat配置: filebeat.inputs:- type:…

机器学习的运作原理和算法分类,让机器学习更加通俗易懂

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

Top-down Microarchitecture Analysis Method

1、英文链接: 1. https://www.intel.com/content/www/us/en/docs/vtune-profiler/cookbook/2023-0/top-down-microarchitecture-analysis-method.html 2. http://portal.nacad.ufrj.br/online/intel/vtune2017/help/GUID-02271361-CCD4-410C-8338-4B8158157EB6.ht…

低代码如何加速数字化转型

数字化转型,正日益决定企业成功的关键。这里的一个关键因素是它可以以更快的速度和质量来实施技术计划。在当今瞬息万变的商业环境中,战略性地采用低代码平台对于旨在加快上市时间、增强业务敏捷性和促进跨团队无缝协作的首席技术官来说至关重要。日益增…

Python | Leetcode Python题解之第279题完全平方数

题目: 题解: class Solution { public:// 判断是否为完全平方数bool isPerfectSquare(int x) {int y sqrt(x);return y * y x;}// 判断是否能表示为 4^k*(8m7)bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7;}int numSquares(i…

Jmeter混合压测(2407)

一 压测需求: 电商作为服务端,至少需要满足并发量,QPS:100/s,TPS:20/s。例如场景: 电商交易中,商品图片请求量最多,电商服务端需要满足并发请求查询图片信息。各家可能会并发请求同一家电商商品、订单等内容。 二 压…

【React】条件渲染:深入探讨高效开发技巧与最佳实践

文章目录 一、什么是条件渲染?二、条件渲染的实现方式三、条件渲染的最佳实践四、复杂条件渲染的实现 在现代前端开发中,React 已成为开发者构建用户界面的首选框架之一。React 的强大之处在于其组件化和状态管理能力,而条件渲染则是 React 开…

WebGIS的地图渲染|SVG|Canvas|Canvas

说到地图,平时我们使用过百度地图、高德地图、腾讯地图等,如果涉及地图开发需求,也有很多选择,如前面提到的几个地图都会提供一套JS API,此外也有一些开源地图框架可以使用,如OpenLayers、Leaflet、Mapbox、…

Drools 决策表的使用与说明(一)

Drools 决策表的使用与说明 Drools决策表的使用官方文档决策表说明决策表使用方式执行drl代码及结果 Drools决策表的使用 官方文档决策表说明 Drools 决策表的使用 16.7. Spreadsheet decision tables 决策表使用方式 在Drools中,决策表通常是以Excel&#xff08…