Sentinel流控规则

article/2025/8/24 7:27:53

Sentinel流控规则

1、基本介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0Hu7NuV-1669330682783)(image/146、添加流控规则.png)]

资源名:唯一名称,默认请求路径(如:http://localhost:8089/testA)

针对来源:Sentinel可以针对调用者进行限流,填写微服务名,指定对哪个微服务进行限流 ,默认default(不区分来源,全部限制)

阈值类型/单机阈值

  1. QPS(每秒钟的请求数量)【挡在门外】:当调用该接口的QPS达到了阈值的时候,进行限流;
  2. 线程数【关门打狗】:当调用该接口的线程数达到阈值时,进行限流

是否集群:不需要集群

流控模式

  1. 直接:接口达到限流条件时,直接限流
  2. 关联:当关联的资源达到阈值时,就限流自己
  3. 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就可以限流)[api级别的针对来源]

流控效果

  1. 快速失败:直接失败
  2. Warm Up:即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值
  3. 排队等待

2、流控模式

2.1、直接流控模式

2.1.1、阈值类型QPS【拦截在门外】

通过上图1给testA添加QPS为1的流控设置,当一秒钟内请求超过1QPS请求数就会直接给前台报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rvkHt2Gq-1669330682784)(image/147、SQP.png)]

默认的前台报错

Blocked by Sentinel (flow limiting)

2.1.2、阀值类型之线程数【关门打狗】

将上面的SQP阈值改为线程数之后,在一秒钟内不管怎么点击请求都不会出现前台报错,通过如下控制器接口来进行演示

给流控的接口添加睡眠0.8秒时间,重启项目

@GetMapping("/testA")
public String testA()
{try {TimeUnit.MILLISECONDS.sleep(800);}catch (InterruptedException e) {e.printStackTrace();}return "------testA";
}

测试:通过多次访问/testA接口查看报错信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F2qfzTXL-1669330682784)(image/148、线程数阈值.png)]

2.2、关联流控模式

当关联的资源达到阈值时,就限流自己

当与A关联的资源B达到阀值后,就限流A自己,B惹事,A挂了

当关联资源/testB的qps阀值超过1时,就限流/testA的Rest访问地址,当【关联资源】达到阈值后限制配置好的【资源名】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHfKIizZ-1669330682784)(image/189、直接关联.png)]

使用场景:订单服务关联第三方支付接口,当支付接口过多的时候导致快瘫痪时,那么就限制我们的下单服务(限流)

1、postman模拟并发密集访问testB

需要将上一次修改控制器的代码还原,不需要再使用测试线程数的,都使用SQP

@GetMapping("/testA")
public String testA()
{return "------testA";
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9Ix4QXi-1669330682784)(image/190、postman模拟并发.png)]

在postman中开始并发测试的时候,在浏览器访问/testA控制器接口查看是否被关联前台报错,当postman并发完成再访问A又可以正常的连接

Blocked by Sentinel (flow limiting)

2.3、链路流控模式

只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就可以限流)[api级别的针对来源]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLedn9Rd-1669330682785)(image/191链路.png)]

同样的测试方法,使用上一次的postman模拟并发请求testB,每秒超过阈值1就会限制A

3、流控效果

3.1、默认的快速失败

直接抛出异常

Blocked by Sentinel (flow limiting)

3.2、Warm Up 预热/冷启动方式

官网介绍地址:https://github.com/alibaba/Sentinel/wiki/流量控制

Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮

当令牌桶饱和的时候,基于 Guava 的计算上,我们可以推出下面两个公式:

rate(c)=m*c+ coldrate

其中,rate 为当前请求和上一个请求的间隔时间,而 rate 是和令牌桶中的高于阈值的令牌数量成线形关系的。cold rate 则为当桶满的时候,请求和请求的最大间隔。通常是 coldFactor * rate(stable)

默认 coldFactor 为 3,即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值。

通常冷启动的过程系统允许通过的 QPS 曲线如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KlCovwA-1669330682785)(image/192、WarmUp.png)]

设置Warm Up

默认 coldFactor 为 3,即请求QPS从(threshold / 3) 开始,经多少预热时长才逐渐升至设定的 QPS 阈值。

案例,阀值为10+预热时长设置5秒。

系统初始化的阀值为10 / 3 约等于3,即阀值刚开始为3;然后过了5秒后阀值才慢慢升高恢复到10

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XIOnh8eM-1669330682785)(image/193、设置预热.png)]

通过postman高并发发送请求再查看Sentinel的实现监控曲线图

上面设置的SQP是10,也就是1秒钟可以处理10个请求,那么通过postman发送并发请求,一下子就达到了最高单机阈值10,就被预热效果给拦住了,过了预热时间基本都是最大阈值内的请求,如果超过阈值就会前台报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hHHeLqUo-1669330682786)(image/194、实时监控.png)]

使用场景

如:秒杀系统在开启的瞬间,会有很多流量上来,很有可能把系统打死,预热方式就是把为了保护系统,可慢慢的把流量放进来,慢慢的把阀值增长到设置的阀值。

3.3、排队等候

匀速排队,让请求以均匀的速度通过,阀值类型必须设成QPS,否则无效。

设置含义:/testA每秒1次请求,超过的话就排队等待,等待的超时时间为20000毫秒。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kcu3YOLE-1669330682786)(image/195、排队等候.png)]

在请求A接口上添加日记打印

log.info(Thread.currentThread().getName() + "...TestA");

postman设置并发线程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aXTUY9jo-1669330682786)(image/196、设置并发线程.png)]

观察日记输出(查看等待输出时间)

输出的时间是随机的,只要看到A后面的资源确实是等待了就可以

2022-09-28 10:27:36.051  INFO 9972 --- [io-8401-exec-10] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-10...TestA
2022-09-28 10:27:38.268  INFO 9972 --- [nio-8401-exec-1] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-1...TestA
2022-09-28 10:27:40.469  INFO 9972 --- [nio-8401-exec-4] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-4...TestA
2022-09-28 10:27:42.653  INFO 9972 --- [nio-8401-exec-6] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-6...TestA
2022-09-28 10:27:44.835  INFO 9972 --- [nio-8401-exec-9] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-9...TestA
2022-09-28 10:27:47.055  INFO 9972 --- [io-8401-exec-10] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-10...TestA
2022-09-28 10:27:49.255  INFO 9972 --- [nio-8401-exec-1] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-1...TestA
2022-09-28 10:27:51.467  INFO 9972 --- [nio-8401-exec-4] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-4...TestA
2022-09-28 10:27:53.653  INFO 9972 --- [nio-8401-exec-6] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-6...TestA
2022-09-28 10:27:55.839  INFO 9972 --- [nio-8401-exec-9] c.z.s.controller.FlowLimitController     : http-nio-8401-exec-9...TestA

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

相关文章

流控方案

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

流控机制的解析

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

Sentinel 三种流控效果

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

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

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

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

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

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

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

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

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

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

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

客户主数据

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

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

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

BP 供应商主数据

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

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

什么是主数据?有什么作用? 在说主数据之前,我们先来看一个场景再来看一个行业趋势到底什么是主数据?为什么说主数据管理是一切工作的起点?为了应对这些问题,我们需要引进主数据管理(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企主数据方案分享 (一):主数据现状、问题分析及客户诉求 J企的主数据实施业务方案已经签署,主数据平台开发方案也基本敲定,接下来推进历史数据规整方案和各业务系统优化方案的制定。 在此与各位同学分享主数据方案…

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

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

数仓建模—主数据管理

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

主数据项目交付最佳实践

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

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

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

MDM主数据管理平台开发精要

随着企业业务迅速发展,需要支撑业务运转的信息系统越来越多,各系统之间数据分散、重复,未完全形成业务闭环,数据孤立不能互通,数据统计不一致,企业主数据(组织、人员、项目、客户、供应商、产品…

一文理解主数据和参考数据

如果你准备要开展推动数据治理或者是数据质量的项目,那么你就有可能会听说到几个词:主数据和参考数据。一开始听到主数据这一词听起来就很高大上,而且非专业人士肯定不理解(即便是从事数据行业的朋友也很难参透)。这一…