Sentinel限流--流控模式与限流效果

article/2025/8/25 6:14:10

文章目录

  • 1、簇点链路
  • 2、流控入门案例
  • 3、流控模式:关联模式
  • 4、流控模式:链路模式
  • 5、流控效果:warm up
  • 6、限流效果:排队等待
  • 7、热点参数限流

1、簇点链路

簇点链路就是项目内的调用链路(controller -> servcie -> mapper ),链路中被监控的每个接口就是一个资源。

默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint),Endpoint可以理解为controller中的每一个方法,每一个端点(Endpoint)就是调用链路中的一个资源。

流控、熔断等都是针对簇点链路中的资源来设置的。

在这里插入图片描述

点击流控,可以新增流控规则:

在这里插入图片描述

QPS为1,即每秒只允许1次请求,超出的请求会被拦截并报错。

2、流控入门案例

需求:给 /order/{orderId}这个资源设置流控规则,QPS不能超过 5。然后利用jemeter测试。
  • 点击流控,设置QPS

在这里插入图片描述

  • 打开Jemter,添加测试计划,右键start

在这里插入图片描述

  • 查看结果树,可以看到确实每秒最多5个请求

在这里插入图片描述

  • 查看sentinel控制台

在这里插入图片描述

3、流控模式:关联模式

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

  • 直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式(入门案例里的效果)
  • 关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
  • 链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流

流控模式:关联

关联模式的使用场景如:比如用户支付时需要修改订单状态,同时用户要查询订单。但查询和修改操作会争抢数据库锁,二者为竞争关系。

很明显,我需要优先满足支付,即修改订单状态优先级更高,因此当修改订单业务触发阈值时,需要对查询订单业务限流。直白讲就是,二者竞争,超过阈值时,优先级低的被限流,避免影响优先级高的。

在这里插入图片描述
当/write资源访问量触发阈值时,就会对/read资源限流,避免影响/write资源。关联资源是优先级高的,在优先级低的上面添加限流规则!

需求:
- 在OrderController新建两个端点:/order/query和/order/update,无需实现业务
- 配置流控规则,当/order/ update资源被访问的QPS超过5时,对/order/query请求限流
  • 写两个测试接口资源
@GetMapping("/order/query")
public String queryOrder(){return "查询订单成功";
}
@GetMappinng("/order/update")
public String updateOrder(){return "更新订单成功";
}
  • 很明显,query资源优先级低,在它上面添加流控规则

在这里插入图片描述

  • jmeter模拟请求/order/update,QPS设置10,按图中设置,这100秒内,update的QPS均大于阈值5

在这里插入图片描述

  • 访问/order/query,可以看到已被限流

在这里插入图片描述

  • 但/order/update资源却不被限制

在这里插入图片描述

对关联模式做个总结就是;

在这里插入图片描述

4、流控模式:链路模式

只针对从指定链路访问到本资源的请求做统计,判断是否超过阈值

例如有两条请求链路:

  • /test1 到 /common
  • /test2 到 /common

如果只希望统计从/test2进入到/common的请求,则可以这样配置:

在这里插入图片描述

需求:
- 有查询订单和创建订单业务,两者都需要查询商品。
- 针对从查询订单进入到查询商品的请求统计,并设置限流,QPS<2

访问资源"查询商品方法",以上就有两条链路:

  • 入口1:查询订单/order/query—>查询商品queryGoods
  • 入口2:创建订单/order/save —> 查询商品queryGoods

这里需要对queryGoods添加链路模式限流,从/order/query进入queryGoods方法的QPS限制必须小于2.

但注意默认只有controller中的方法会被监控,Service层的queryGoods方法没有被监控,也就不能配置限流规则,要标记其它方法,需要利用@SentinelResource注解:

@SentinelResource("goods")
public void queryGoods() {   System.err.println("查询商品");
}

此外:Sentinel默认会将Controller方法做context整合,认为是由同一个根链路发展来的子链路,从而导致链路模式的流控失效,因此需要修改application.yml,添加配置:

spring:cloud:    sentinel:      web-context-unify: false # 关闭context整合
  • 接口与方法资源代码展示
public class OrderService{@SentinelResource("goods")public void queryGoods(){System.out.println("查询商品");}}
@Resource
private OrderService orderService;@GetMapping("/order/query")
public String queryOrder(){orderService.queryGoods();  //查商品,形成一个链路System.out.println("查询订单");return "查询订单成功";	
}@GetMapping("/order/save")
public String saveOrder(){orderService.queryGoods(); //查商品,形成一个链路System.out.println("新增订单");return "新增订单成功";	}
  • 访问下save和query接口,查看sentinel簇点链路:

在这里插入图片描述

  • 两个goods都一样,随便选一个点击新增流控按钮

在这里插入图片描述

  • 打开Jmeter做测试,QPS我设为200/50 = 4 > 2,发送query和save请求:

在这里插入图片描述

  • 可以看到save不受影响:

在这里插入图片描述

  • 但query的链路我设置了限流,可以看到每秒总有4-2=2个请求失败:

在这里插入图片描述

关于流控模式的总结:

在这里插入图片描述

5、流控效果:warm up

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

  • 快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。
  • warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。
  • 排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长

在这里插入图片描述

就像剧烈运动前慢跑热身一样,服务器刚启动时,不能直接打满到最大QPS,这就是warm up的限流效果:

warm up也叫预热模式,是应对服务冷启动的一种方案。请求阈值初始值是 threshold / coldFactor,前者为最大QPS,后者为冷启动因子。持续指定时长后,逐渐提高到threshold值。而coldFactor的默认值是3.

例如,我设置QPS的threshold为10,预热时间为5秒,那么初始阈值就是 10 / 3 ,也就是3,然后在5秒后逐渐增长到10.

在这里插入图片描述

需求:
-/order/{orderId}这个资源设置限流,最大QPS10- 利用warm up效果,预热时长为5

添加流控规则:

在这里插入图片描述

Jmeter设置QPS为10,start发起请求:

在这里插入图片描述

可以看到刚开始,10个请求只成功3个:

在这里插入图片描述
随着时间的推移,达到10,则全部请求都能成功:

在这里插入图片描述
查看监控面板:

在这里插入图片描述

6、限流效果:排队等待

当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。当预期等待时长超过timeout时间,则请求才会被拒绝。

在这里插入图片描述
假设QPS=5,即每200ms处理一个请求,比如设置timeout=2000。如上图,预计等待时间线上排队着一个个请求,最后一个绿点的预计等待时间刚好为2000ms == timeout,此时再来一个需求,预计等待时间就大于了timeout,这个需求就会被拒绝。

在这里插入图片描述
这种限流效果,其实起到了一个流量整形的效果,不管client来的需求每秒有多少个,进入队列后再出来,就都是一秒QPS个:

在这里插入图片描述

需求:
给/order/{orderId}这个资源设置限流,最大QPS为10,利用排队的流控效果,超时时长设置为5s
  • 新增流控规则

在这里插入图片描述

  • Jmeter中设置QPS为15,如果是前两种限流效果,则每秒的15个请求中,成功10个,失败5个。按排队的限流效果,应该是刚开始多出的5个不会失败

在这里插入图片描述

  • 查看监控面板,可以看到每秒10个请求,且多出来的5个不是全部拒绝,而是排队时间预计超过5s的才拒绝

在这里插入图片描述

流控效果小结:

在这里插入图片描述

7、热点参数限流

之前的限流是统计所有请求,然后判断QPS是否超过阈值,如下图,即QPS为4:

在这里插入图片描述

而热点参数限流则是分别统计参数值相同的请求,然后判断是否超过阈值。

在这里插入图片描述

配置示例为:

在这里插入图片描述

含义是:对hot这个资源的0号参数(第一个参数)做统计,每1秒相同参数值的请求数不能超过5

但此时有个问题,比如商品001没人看,商品002火爆,现在限制商品id相同的请求,每秒不能大于5个,则001,002都没一竿子打死了,001的QPS用不完,002的QPS不够用。针对这种场景,可以对部分参数设置例外配置:

在这里插入图片描述

这个配置的含义就是:对0号的long类型参数限流,每1秒相同参数的QPS不能超过5。但如果参数值为100或者101,则可以例外:

  • 如果参数值是100,则每1秒允许的QPS为10
  • 如果参数值是101,则每1秒允许的QPS为15
需求:- 给/order/{orderId}这个资源添加热点参数限流,规则如下:
- 默认的热点参数规则是每1秒请求量不超过2
- 给102这个参数设置例外:每1秒请求量不超过4
- 给103这个参数设置例外:每1秒请求量不超过10

在这里插入图片描述
就是说,添加热点参数限流,我们之前的controller中的那一个个方法,热点限流不再认识,需要额外加@SentinelSource注解。

  • 修改代码,添加@SentinelSource注解
@SentinelSource("hot") //此时,这个资源(方法)就有两个名字了,之前的/order/{orderID}和hot
@GetMapping("{orderId}")
public Oeder queryOrderByUserId(@PathVariable("orderId") Long orderId){return orderService.queryOrderById(orderId);
}
  • 重启服务,可以看到簇点链路中多了一个hot(别直接在后面点击【+热点】来配置,这里没高级选项)

在这里插入图片描述

  • 切到热点规则侧边栏,新增热点限流规则

在这里插入图片描述

  • 使用Jmeter模拟并发,QPS设置为500/100 = 5,三个取样器中分别请求101、102、103三个orderId

在这里插入图片描述

  • 查看Jmeter结果树或者Sentinel的监控面板

在这里插入图片描述

最后,这个热点限流是根据传参来进行更细粒度的限流,且传参只支持基本数据类型。要是没有这种细粒度需求,走前面的正常限流模式 + 限流效果即可。


http://chatgpt.dhexx.cn/article/vkBUJDEb.shtml

相关文章

【sentinel】流控规则详解

流量控制规则&#xff0c;简称流控规则&#xff0c;会对资源的流量进行限制。同一个资源可以对应多条限流规则。Sentinel会对该资源的所有限流规则依次遍历&#xff0c;直到有规则触发限流或者所有规则遍历完毕。 限流的直接表现是抛出FlowException异常。FlowException是Bloc…

Sentinel流控规则

Sentinel流控规则 1、基本介绍 资源名&#xff1a;唯一名称&#xff0c;默认请求路径(如&#xff1a;http://localhost:8089/testA) 针对来源&#xff1a;Sentinel可以针对调用者进行限流&#xff0c;填写微服务名&#xff0c;指定对哪个微服务进行限流 &#xff0c;默认defa…

流控方案

不同的场景下所需的流控算法不尽相同&#xff0c;那应该如何选择适用的流控方案呢&#xff1f;本文分享单机及分布式流控场景下&#xff0c;简单窗口、滑动窗口、漏桶、令牌桶、滑动日志等几种流控算法的思路和代码实现&#xff0c;并总结了各自的复杂度和适用场景。较长&#…

流控机制的解析

流控是以太网的一项基本功能&#xff0c;可以防止在端口拥塞的情况下出现丢帧。在深入分析之前&#xff0c;先看一个简单的应用场景&#xff1a; 端口A和B接收报文&#xff0c;端口C向外转发报文。如果端口A和B的收包速率之和大于端口C的带宽&#xff0c;那么部分报文就会缓存在…

Sentinel 三种流控效果

文章目录 流控效果1.快速失败2.warm up1&#xff09;配置流控规则&#xff1a;2&#xff09;Jmeter测试 3.排队等待1&#xff09;添加流控规则2&#xff09;Jmeter测试 .总结 流控效果 我们先来回顾一下流控模式有哪些&#xff1a; 流控模式说明直接统计当前资源的请求&#…

Sentinel流控规则之流控模式介绍

目录 1.直接模式 2.关联模式 3.链路模式 4.流控模式总结 参考&#xff1a; Sentinel限流规则-流控模式之链路模式【图文】_mb5fd869d1d8388_51CTO博客 SpringCloud Alibaba之Sentinel流控管理 - 知乎 (zhihu.com) Sentinel-流控模式之关联模式【图文】_mb5fdcae58218c5_…

串口使用系列学习之什么是流控

概念 在两个设备正常通信时&#xff0c;由于处理速度不同&#xff0c;就存在这样一个问题&#xff0c;有的快&#xff0c;有的慢&#xff0c;在某些情况下&#xff0c;就可能导致丢失数据的情况。  如台式机与单片机之间的通讯&#xff0c;接收端数据缓冲区已满&#xff0c;则…

串口流控(CTS/RTS)使用详解

1.流控概念 在两个设备正常通信时&#xff0c;由于处理速度不同&#xff0c;就存在这样一个问题&#xff0c;有的快&#xff0c;有的慢&#xff0c;在某些情况下&#xff0c;就可能导致丢失数据的情况。 如台式机与单片机之间的通讯&#xff0c;接收端数据缓冲区已满&#xff0…

数据治理--浅谈数据标准、元数据、主数据、数据模型

数据标准 数据标准:保障数据的内外部使用和交换的一致性、准确性的规范性约束(如命名、类型、值域等),通常包括了基础指标和计算指标 计算指标:即计算口径,如下单转化率、获客成本、复购率的具体计算的方式 如怎么定义一个人的性别、婚姻状况、健康状况,在不同的业务系…

什么是主数据?什么是主数据管理系统?

什么是主数据&#xff1f;什么是主数据管理系统&#xff1f; 什么是主数据&#xff1f; 企业主数据&#xff08;Master Data&#xff09;是用来描述企业核心业务实体的数据&#xff0c;比如客户、合作伙伴、员工、产品、物料单、账户等&#xff1b;它是具有高业务价值的、可以在…

客户主数据

1、KNA1(客户主文件的一般数据) 2、KNB1(客户主数据 (公司代码)) 3、KNVV(客户主记录销售数据) 4、KNVP(客户主记录伙伴功能) 5、KNVK(客户主要联系伙伴) 6、KNAS(客户主数据&#xff08;一般地区的增值税登记号&#xff09;) 7、KNB5(客户主记录 (催款数据)&#xff09; …

企业的主数据建设方法论与实践 | 推荐收藏

本篇文章为亿信华辰《企业的主数据建设方法论与实践》视频直播稿件。 这次我的主题是企业的主数据建设方法论与实践&#xff0c;相信大家来听这场直播&#xff0c;都是对主数据建设比较感兴趣的&#xff0c;同时我也希望能够通过这样一场分享&#xff0c;给大家在主数据的建设…

BP 供应商主数据

BP 供应商S4 和ECC的区别&#xff1a; BP master 这个在SAP ECC6.0之前&#xff0c;SAP对供应商主数据&#xff0c;客户主数据是单独管理的&#xff0c;到了S4 HANA版本&#xff0c;所有的客户主数据和供应商主数据都叫BP 主数据&#xff0c; 通过不同的BP Role 来区分是供应商…

什么是主数据?有什么作用?

什么是主数据&#xff1f;有什么作用&#xff1f; 在说主数据之前&#xff0c;我们先来看一个场景再来看一个行业趋势到底什么是主数据&#xff1f;为什么说主数据管理是一切工作的起点&#xff1f;为了应对这些问题&#xff0c;我们需要引进主数据管理&#xff08;MDM&#xf…

数据治理【主数据管理】

目录 1.摸家底 1.1 数据资源普查 1.2 主数据识别 1.3 数据管理能力评估 2.建体系 2.1 组织体系 2.2 标准体系 2.3 制度与流程体系 2.4 技术体系 2.5 安全体系 3.接数据 4.抓运营 4.1 主数据管理 4.2 主数据推广 4.3 主数据质量 4.4 主数据变现 我们知道主数据项目的建设是一个循…

主数据建设思路分享

J企主数据方案分享 &#xff08;一&#xff09;&#xff1a;主数据现状、问题分析及客户诉求 J企的主数据实施业务方案已经签署&#xff0c;主数据平台开发方案也基本敲定&#xff0c;接下来推进历史数据规整方案和各业务系统优化方案的制定。 在此与各位同学分享主数据方案…

数据治理系列(三):主数据管理

主数据项目建设从方法上,分为以下四部,简单归结为12个字:“摸家底、建体系、接数据、抓运营”! 一、摸家底 摸家底需要全面调研和了解企业的数据管理现状,以便做出客观切实的数据管理评估! 1、数据资源普查 数据资源普查的方法常用的有两种,一种是自顶向下的梳理和调…

数仓建模—主数据管理

主数据管理 前面我们介绍过元数据管理,其实关于元数据我们称之为数据的数据,或者说是描述数据的数据,其实除了元数据之外,我们还有主数据,也就是元数据的描述对象。 元数据为大数据平台绘制数据地图、统一数据口径、标明数据方位、分析数据关系、管理模型变更及精确到字…

主数据项目交付最佳实践

任何规模的企业都会存在各种各样的数据问题&#xff0c;主数据管理早在十几年前就已经是企业信息化建设中的一部分&#xff0c;由于企业普遍对此缺乏正确的认识、系统个数较少、数据混乱现象不明显等原因&#xff0c;导致主数据管理这一手段并没有被企业真正的重视起来&#xf…

【数据治理】数据元、元数据、主数据、参考数据概述

【数据治理】数据元、元数据、主数据、参考数据概述 数据元 什么是数据元&#xff1a; 《GB/T 19488.1 电子政务数据元第1部分&#xff1a;设计和管理规范》 里是这样定义的&#xff1a; 数据元&#xff08;Data element&#xff09;&#xff1a;又称数据类型&#xff0c;通…