SpringCloud Alibaba微服务中Sentinel流控规则(详解+示例demo+测试效果)

前言:

本篇博客介绍了有关于Sentinel的几种常用的流控规则。



一。概述

流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

FlowSlot 会根据预设的规则,结合前面 NodeSelectorSlotClusterBuilderSlotStatisticSlot 统计出来的实时信息进行流量控制。

限流的直接表现是在执行Entry nodeA = SphU.entry(resourceName) 的时候抛出 FlowException 异常。FlowExceptionBlockException的子类,您可以捕捉 BlockException来自定义被限流之后的处理逻辑。

同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历,直到有规则触发限流或者所有规则遍历完毕。

一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果:

  • resource:资源名,即限流规则的作用对象
  • count: 限流阈值
  • grade: 限流阈值类型(QPS 或并发线程数)
  • limitApp: 流控针对的调用来源,若为 default 则不区分调用来源
  • strategy: 调用关系限流策略
  • controlBehavior: 流量控制效果(直接拒绝、Warm Up、匀速排队)

官方文档地址:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

二。QPS-直接-快速失败

1.说明

当一秒内 QPS 超过某个阈值的时候,则采取措施进行流量控制。

在这里插入图片描述

2.示例demo

控制器代码:

在这里插入图片描述

3.sentinel控制台操作

在这里插入图片描述

在这里插入图片描述

4.访问测试

一秒点击一次还是可以正常访问:

在这里插入图片描述

若快速点击多次,超过了QPS阈值,则被限流:

在这里插入图片描述

三。线程-直接-快速失败

1.说明

当一秒内 访问线程数超过某个阈值的时候,则采取措施进行流量控制。

在这里插入图片描述

2.示例demo

控制器代码:

在这里插入图片描述

3.sentinel控制台操作

在这里插入图片描述

4.访问测试

快速点击多次依然可以访问:
在这里插入图片描述

若打开两个浏览器窗口,快速切换并快速刷新页面,超过了访问线程数阈值,则被限流:

在这里插入图片描述

四。QPS-关联-快速失败

1.说明:

当接口A关联了接口B时,在访问B接口超过了规定流量阈值的情况下,接口A也将会被限流

在这里插入图片描述

2.示例demo

控制器代码:

在这里插入图片描述

3.sentinel控制台操作

先给testB建立流控规则:

在这里插入图片描述
在建立/testA流控规则,关联/testB:

在这里插入图片描述

4.访问测试

使用postman建立新的访问接口集合集中访问

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在postman访问testB接口的同时,去访问testA,发现testA被限流:

在这里插入图片描述

五。QPS-链路-快速失败

1.说明

当两个接口A和接口B访问同一个资源时,若对接口A进行了资源的链路控制,超过了规定的阈值后,再次访问接口A去请求资源时会出现报错

在这里插入图片描述

2.实例demo

控制器代码:

在这里插入图片描述

service:

在这里插入图片描述
在这里插入图片描述

配置文件:

在这里插入图片描述

3.sentinel控制台操作

在这里插入图片描述

4.访问测试

多次访问/testA接口,超过阈值再次访问接口A去请求资源时会出现报错:

在这里插入图片描述

六。QPS-直接-预热

1.说明

warm up就是为了防止突然进入的大流量大系统冲垮,在一定时间内将访问流量慢慢增加

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

公式:阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值

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

2.实例demo

在这里插入图片描述

3.sentinel控制台操作

在这里插入图片描述

4.访问测试

当前五秒阈值为10/3=3,快速点击时,触发限流:

在这里插入图片描述

当五秒钟过预热后,阈值到达10,再次快速点击,访问正常:

在这里插入图片描述

七。QPS-直接-匀速排队

1.说明

排队等待,匀速通过

在这里插入图片描述
在这里插入图片描述

2.实例demo

在这里插入图片描述

3.sentinel控制台操作

在这里插入图片描述

4.访问测试

再次使用postman接口集合对testB接口进行访问:

在这里插入图片描述
在这里插入图片描述
后台线程数每隔相应的延迟时间对接口进行访问,实现匀速接口限流:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44009447/article/details/111992223