【Sentinel】流控模式

article/2025/8/25 3:29:33

目录

1.簇点链路

2.快速入门

2.1.示例

2.2.练习

3.流控模式

3.1.关联模式

3.2.链路模式

3.3.总结

1.簇点链路

雪崩问题虽然有四种方案,但是限流是避免服务因突发的流量而发生故障,是对微服务雪崩问题的

预防。我们先学习这种模式。

当请求进入微服务时,首先会访问DispatcherServlet,然后进入Controller、Service、Mapper,这

样的一个调用链就叫做簇点链路。簇点链路中被监控的每一个接口就是一个资源

默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint,也就是controller中的方法),因

此SpringMVC的每一个端点(Endpoint)就是调用链路中的一个资源。

例如,我们刚才访问的order-service中的OrderController中的端点:/order/{orderId}

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

  • 流控:流量控制

  • 降级:降级熔断

  • 热点:热点参数限流,是限流的一种

  • 授权:请求的权限控制  

2.快速入门

2.1.示例

点击资源/order/{orderId}后面的流控按钮,就可以弹出表单。

表单中可以填写限流规则,如下:

 其含义是限制 /order/{orderId}这个资源的单机QPS为1,即每秒只允许1次请求,超出的请求会被

拦截并报错。

2.2.练习

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

1)首先在sentinel控制台添加限流规则

2)利用jmeter测试

如果没有用过jmeter,可以参考课前资料提供的文档《Jmeter快速入门.md》

课前资料提供了编写好的Jmeter测试样例:

 

打开jmeter,导入课前资料提供的测试样例:

 

选择:

 

20个用户,2秒内运行完,QPS是10,超过了5.

选中流控入门,QPS<5右键运行:

注意,不要点击菜单中的执行按钮来运行。

结果:

 

可以看到,成功的请求每次只有5个  

3.流控模式

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

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

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

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

快速入门测试的就是直接模式。  

3.1.关联模式

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

配置规则

语法说明:当/write资源访问量触发阈值时,就会对/read资源限流,避免影响/write资源。

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

需求说明

  • 在OrderController新建两个端点:/order/query和/order/update,无需实现业务

  • 配置流控规则,当/order/ update资源被访问的QPS超过5时,对/order/query请求限流

1)定义/order/query端点,模拟订单查询

@GetMapping("/query")
public String queryOrder() {return "查询订单成功";
}

 2)定义/order/update端点,模拟订单更新

@GetMapping("/update")
public String updateOrder() {return "更新订单成功";
}

重启服务,查看sentinel控制台的簇点链路:

3)配置流控规则

对哪个端点限流,就点击哪个端点后面的按钮。我们是对订单查询/order/query限流,因此点击它

后面的按钮:

 

在表单中填写流控规则:

 

4)在Jmeter测试

选择《流控模式-关联》:

可以看到1000个用户,100秒,因此QPS为10,超过了我们设定的阈值:5

查看http请求:

请求的目标是/order/update,这样这个断点就会触发阈值。

但限流的目标是/order/query,我们在浏览器访问,可以发现:

确实被限流了。

5)总结

3.2.链路模式

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

配置示例

例如有两条请求链路:

  • /test1 --> /common

  • /test2 --> /common

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

实战案例

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

步骤:

  1. 在OrderService中添加一个queryGoods方法,不用实现业务

  2. 在OrderController中,改造/order/query端点,调用OrderService中的queryGoods方法

  3. 在OrderController中添加一个/order/save的端点,调用OrderService的queryGoods方法

  4. 给queryGoods设置限流规则,从/order/query进入queryGoods的方法限制QPS必须小于2

实现:

1)添加查询商品方法

在order-service服务中,给OrderService类添加一个queryGoods方法:

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

 

2)查询订单时,查询商品

在order-service的OrderController中,修改/order/query端点的业务逻辑:

@GetMapping("/query")
public String queryOrder() {// 查询商品orderService.queryGoods();// 查询订单System.out.println("查询订单");return "查询订单成功";
}

3)新增订单,查询商品

在order-service的OrderController中,修改/order/save端点,模拟新增订单:

@GetMapping("/save")
public String saveOrder() {// 查询商品orderService.queryGoods();// 查询订单System.err.println("新增订单");return "新增订单成功";
}

4)给查询商品添加资源标记

默认情况下,OrderService中的方法是不被Sentinel监控的,需要我们自己通过注解来标记要监控

的方法。

给OrderService的queryGoods方法添加@SentinelResource注解:

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

链路模式中,是对不同来源的两个链路做监控。但是sentinel默认会给进入SpringMVC的所有请求

设置同一个root资源,会导致链路模式失效。

我们需要关闭这种对SpringMVC的资源聚合,修改order-service服务的application.yml文件:

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

 重启服务,访问/order/query和/order/save,可以查看到sentinel的簇点链路规则中,出现了新的资

源:

5)添加流控规则

点击goods资源后面的流控按钮,在弹出的表单中填写下面信息:

 只统计从/order/query进入/goods的资源,QPS阈值为2,超出则被限流。

6)Jmeter测试

选择《流控模式-链路》:

可以看到这里200个用户,50秒内发完,QPS为4,超过了我们设定的阈值2

一个http请求是访问/order/save:

 运行的结果:

完全不受影响。

另一个是访问/order/query:

运行结果:

 每次只有2个通过。

3.3.总结

流控模式有哪些?

•直接:对当前资源限流

•关联:高优先级资源触发阈值,对低优先级资源限流。

•链路:阈值统计时,只统计从指定资源进入当前资源的请求,是对请求来源的限


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

相关文章

串口中硬件流控和软件流控

流控的概念 发送端数据发送速度过快&#xff0c;导致接收端的缓冲区数据还没有被读出而发送端发送过来的数据覆盖了原有缓冲区的数据而提出的一种流量控制方法&#xff1b; 主要为了解决常用的串口通信中&#xff0c;由于缺少时钟线&#xff0c;当速度不匹配、处理能力不匹配…

以太网基础--流控技术

随着数据中心网络技术和带宽不断发展&#xff0c;流控技术在网络中发挥着越来越重要的作用&#xff0c;但一直未曾有过很大变革。直到无损网络的出现&#xff0c;流控技术出现新突破。作为以太网的基本功能之一&#xff0c;流控技术用于可以防止拥塞的情况下出现丢包&#xff0…

串口的硬件流控和软件流控

为什么需要流控&#xff1f; 当两台设备进行串口通信&#xff0c;假如他们对数据的处理速度不同。如果接收端数据缓冲区已满&#xff0c;则此时继续发送来的数据就会丢失。使用流控机制时&#xff0c;当接收端数据处理能力饱和时&#xff0c;就发出“不再接收”的信号&#xff…

流控

RabbitMQ可以对内存和磁盘的使用量设置阈值&#xff0c;当到达阈值后&#xff0c;生产者将被阻塞&#xff0c;直到对应项恢复正常。除了这两个阈值&#xff0c;从2.8.0版本开始&#xff0c;RabbitMQ还引入了流控&#xff08;Flow Control&#xff09;机制来确保稳定性。流控机制…

sentinel详解——流控、降级、热点、熔断

Sentinel&#xff08;哨兵&#xff09;是一个面向微服务的流量控制、熔断降级的组件&#xff0c;支持界面化的细粒度统一配置&#xff1b;可以对微服务进行可视化的监控和保护&#xff1b;同时可和nacos、dubbo、redis等结合使用。 一、后端代码中sentinel配置 1、引入pom &l…

【微服务|Sentinel】流控规则概述|针对来源|流控模式详解<直接 关联 链路>

文章目录 流控规则一览1. 资源名2. 针对来源3. 阙值类型4. 是否集群5. 流控模式6. 流控效果针对来源介绍实现该功能步骤测试部分源码流控模式流控模式之关联流控模式之链路流控效果快速失败Warm Up排队等待我们可在簇点链路进行流控设置,点开相关资源的流控按钮即可进行流控相…

Sentinel流控

Sentinel 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 1.sentinel特性 Sentinel 具有以下特征: 丰富的应用场景&#xff1a; Sentinel 承接了…

CAN报文多帧,首帧,流控帧,连续帧

数据发送为单帧&#xff0c;所以06代表发送的数据中含有6个字节&#xff0c;回复为正反馈&#xff0c;为连续帧。10 代表连续帧的首帧&#xff0c;1E代表此连续帧含有30个字节&#xff0c;30代表此连续帧的流控制帧&#xff0c;21&#xff0c;22&#xff0c;23&#xff0c;24代…

Sentinel-限流规则(流控模式:直接、关联、链路)

一、流控模式-直接 添加规则&#xff1a; 测试例子分析&#xff1a; 启动测试 点击 察看结果树 上面测试例子&#xff0c;到Sentinel控制台的实时监控可以看到 二、流控模式-关联 • 关联模式 &#xff1a;统计与当前资源相关的另一个资源&#xff0c;触发阈值时&#xff0c;对…

Sentinel的另外三种流控模式(附代码详细介绍)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将详细介绍Sentinel的其他三种流控模式&#xff0c;后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x1f44f;&#…

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

文章目录 1、簇点链路2、流控入门案例3、流控模式&#xff1a;关联模式4、流控模式&#xff1a;链路模式5、流控效果&#xff1a;warm up6、限流效果&#xff1a;排队等待7、热点参数限流 1、簇点链路 簇点链路就是项目内的调用链路&#xff08;controller -> servcie ->…

【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…

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

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