Sentinel 三种流控效果

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sentinel 三种流控效果相关的知识,希望对你有一定的参考价值。

文章目录

流控效果

我们先来回顾一下流控模式有哪些:

流控模式说明
直接统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
关联统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
链路统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流

三种流控模式我们都可以在流控选项中进行设置。

此外,在流控的高级选项中,还有一个流控效果选项,例如下图所示:

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

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

下面我们再来详细了解下各个流控效果是怎样的,注意:下面几种流控效果的流控模式都是默认的直接模式,我们只探究流控效果。

1.快速失败

快速失败是默认的处理方式,当请求达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。

例如我们设置阈值为一秒一个请求,当我们请求QPS超过阈值时候,在浏览器中会直接报错:

浏览器中打印报错:

2.warm up

阈值一般是一个微服务能承担的最大QPS,但是一个服务刚刚启动时,一切资源尚未初始化(冷启动),如果直接将QPS跑到最大值,可能导致服务瞬间宕机。

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

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

案例

需求:给/order/orderId这个资源设置限流,最大QPS为10,利用warm up效果,预热时长为5秒

1)配置流控规则:

2)Jmeter测试

QPS为10.

刚刚启动时,大部分请求失败,成功的只有3个,说明QPS被限定在3:

随着时间推移,成功比例越来越高:

到Sentinel控制台查看实时监控:

一开始:

预热一段时间后:

我们从过程中也可以看到,Wamp up效果的阈值增长是主键递增的

3.排队等待

当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。

排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。

例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout = 2000,意味着预期等待时长超过2000ms的请求会被拒绝并抛出异常。

那什么叫做预期等待时长呢?

例如:现在一下子来了12 个请求,因为每200ms执行一个请求,那么:

  • 第6个请求的预期等待时长 = 200 * (6 - 1) = 1000ms
  • 第12个请求的预期等待时长 = 200 * (12-1) = 2200ms

现在,第1秒同时接收到10个请求,但第2秒只有1个请求,此时QPS的曲线这样的:

如果使用队列模式做流控,所有进入的请求都要排队,以固定的200ms的间隔执行,QPS会变的很平滑:

这样平滑的QPS曲线,对于服务器来说是更友好的。

那么下面我们来操作一下:

案例

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

1)添加流控规则

2)Jmeter测试

QPS为15,已经超过了我们设定的10。

如果是之前的 快速失败、warmup模式,超出的请求应该会直接报错。

但是我们看看队列模式的运行结果:

全部都通过了。

再去sentinel查看实时监控的QPS曲线:

QPS非常平滑,一致保持在10,但是超出的请求没有被拒绝,而是放入队列。因此响应时间(等待时间)会越来越长。

当队列满了以后,才会有部分请求失败:

.总结

流控效果有哪些?

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

以上是关于Sentinel 三种流控效果的主要内容,如果未能解决你的问题,请参考以下文章

Sentinel 三种流控模式

Sentinel 三种流控模式

微服务限流Sentinel讲解

什么!Sentinel流控规则可以这样玩?

Sentinel流控规则简介与实践

重学SpringCloud系列八之分布式系统流量卫兵sentinel