Sentinel流控规则

news2025/8/11 16:27:54

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://www.coloradmin.cn/o/33751.html

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

相关文章

Bioinformatics2021 | FraGAT+:基于分子原始片段的多尺度图注意力机制的分子性质预测模型

原文标题:FraGAT: a fragment-oriented multi-scale graph attention model for molecular property prediction 论文地址:FraGAT: a fragment-oriented multi-scale graph attention model for molecular property prediction | Bioinformatics | Oxfo…

Windows OpenGL ES 图像阴影

目录 一.OpenGL ES 图像阴影 1.原始图片2.效果演示 二.OpenGL ES 图像阴影源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…

SuperMap 云原生动态伸缩不可用该如何解决

最近碰到个别用户在ARM环境国产化操作系统中使用SuperMap iManager for K8S的时候出现服务节点伸缩不生效的问题。今天咱们就以此例来给大家讲解下如何解决该问题。 问题现象:在云套件服务节点管理中,设置伸缩为动态伸缩,设置阈值条件后&…

web前端-javascript-自增++和自减--(a++和++a,都在自身基础上+1,a--和--a都在自增基础上-1,自增和自减的练习)

文章目录自增和自减--1. 自增 1.1 通过自增可以使变量在自身的基础上增加1.2 对一个变量自增以后,原变量的值会立即自增 11.3 自增分为两种,:后(a) 和 前(a)2. 自减 --2.1 通过自减可以使变量在自身的基础上减 12.2 自减分成两种,…

(热门)智慧社区助力实现社区数字化转型

社区是人们生活的重要场所,传统社区的运营及管理方式已经无法满足人们日益增长的物质和文化生活需要。社区的通讯、安全和社区居民信息的收集、处理及共享等问题都成为阻碍社区服务进一步发展的瓶颈。 智慧社区是利用物联网、云计算、移动互联网、信息智能终端等新…

前后端分离项目,vue+uni-app+php+mysql订座预约系统设计与实现(H5移动项目)

功能介绍 【后台功能】 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息,支持删除 录入资讯:录入资讯标题、内容等信息 管理资讯&#x…

电力电子元器件行业研究:市场规模持续增长

电力电子元器件制造是指用于电能变换和控制(从而实现运动控制)的电子产品的制造。 电力电子器件具有以下特征 1)其处理电功率的能力较强;(2)其主要工作在开关状态;(3)电…

前后端分离项目,vue+uni-app+php+mysql电影院售票系统设计与实现(H5移动项目)

功能介绍 【后台功能】 会员列表:查看所有注册会员信息,支持删除 录入资讯:录入资讯标题、内容等信息 管理资讯:查看已录入资讯列表,支持删除和修改 广告设置:上传图片和设置小程序首页轮播图广告地址 留言…

Java项目:JSP网上在线酒类商城系统网站

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为前后台项目,分为普通用户与管理员两种角色,普通用户登录前台,管理员登录后台; 管理员角…

[附源码]java毕业设计医院疫情疾控管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Android入门第34天-Android的Menu组件使用大全

简介 Android有不同的菜单: 系统菜单弹出菜单(可自定义样式)Context Menu;子菜单; 菜单的使用和我们前面说的AlertDialog很像。它可以支持自定义样式、也可以对菜单的点击事件进行绑定。 Android里有几个MainActivit…

《嵌入式 - 深入剖析STM32》STM32 启动流程详解(GCC)

开发环境: 处理器:STM32F103 GCC:10.3.1 对于我们常用的桌面操作系统而言,我们在开发应用时,并不关心系统的初始化,绝大多数应用程序是在操作系统运行后才开始运行的,操作系统已经提供了一个合…

vxe-table 表格尾部小计列项再合计展示

公式:店员奖金item1item3item5item7 this.dyjj全局变量 this.tableDat 全局数组 1.求出尾部小计这一行的数据 columns.map((column, columnIndex) > { var aa XEUtils.sum(data, column.property) this.tableDat.push(aa) if (columnIndex 0) { return ‘小计…

USB TO I2C/SPI(上海同旺电子)调试器调试ADT7420--step3

所需设备: 1、USB TO I2C/SPI(上海同旺电子)专业版 或 升级版 2、ADT7420 0.25C精度、16位数字I2C温度传感器; USB TO I2C/SPI(上海同旺电子)专业版 或 升级版,既支持I2C的标准指令,又支持I2C的复合指令,市面上大部分I2C调试器…

【JSP】Page指令和九大内置对象

JSPJSP中的Page指令关于Page指令常用的属性1. <%page session"true|false" %>2. <%page contentType"text/json" pageEncoding"UTF-8" %>3. <%page import"java.util.Collection,java.sql.Connection"%>4. <%pag…

ImmunoChemistry艾美捷绿色活/死染色解决方案

ImmunoChemistry艾美捷绿色活/死染色是一种活细胞不渗透、绿色荧光发射DNA染料&#xff0c;用于生存能力、细胞凋亡和坏死研究以及固定细胞核染色。本产品与坏死或渗透化细胞的dsDNA/细胞核结合&#xff0c;可与活细胞染料结合使用&#xff0c;用于活/死鉴别。使用流式细胞仪或…

Redis基础命令(String类型)Value为JSON

目录 String类型&#xff08;存储的值为JSON形式&#xff09; 问题&#xff1a; 解决办法&#xff1a; 示例&#xff1a; 实际操作&#xff1a; 总结&#xff1a; String类型&#xff08;存储的值为JSON形式&#xff09; 问题&#xff1a; Redis没有类似MySql中的表的概…

iText7高级教程之html2pdf——5.自定义标签和CSS应用

在本章中&#xff0c;我们将更改pdfHTML插件的两个最重要的内部机制。 我们将覆盖将HTML标签与iText对象匹配的默认功能&#xff0c;更具体地说是DefaultTagWorkerFactory机制&#xff0c;以及我们将覆盖将CSS样式与iText样式相匹配的默认功能&#xff0c;更具体地说是Default…

【Python百日进阶-WEB开发-冲進Flask】Day183 - Flask数据库ORM基础、增加

文章目录一、day03项目环境和结构搭建1.1 flask-script1.1.1 flask-script是干什么的&#xff1f;1.1.2 flask-script安装1.1.3 flask-script的使用1.1.3.1 创建Manager实例1.1.3.2 初始化实例出错与解决1.1.4 终端启动1.1.4.1 查看runserver参数1.1.5 自定义添加manager命令1.…

ARM-A架构入门基础(二)异常处理

14天学习训练营导师课程&#xff1a;周贺贺《ARMv8/ARMv9架构-快速入门》 1. 异常处理种类 1.1 中断 在ARM中&#xff0c;FIQ的优先级要高于IRQ&#xff0c;在SOC内部会有一个中断控制器负责中断优先级调度&#xff0c;然后发送中断信号给处理器。中断属于异步模式的异常。 …