[toc]

一、流控界面说明

image.png

  1. 资源名:唯一名称,默认请求路径
  2. 针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default (不区分来源)
  3. 阈值类型/单机阈值:
    1. QPS(每秒钟的请求数量):当调用该api的QPS达到阈值的时候,进行限流。
    2. 线程数:当调用i该api的线程数达到阈值的时候,进行限流
  4. 是否集群:不需要集群
  5. 流控模式:
    1. 直接:api达到限流条件时,直接限流
    2. 关联:当关联的资源达到阈值时,就限流自己
    3. 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
  6. 流控效果:
    1. 快速失败:直接失败,抛异常
    2. Warm Up:根据codeFactor(冷加载因子,默认3)的值,从阈值codeFactor,经过预热时长,才达到设置的QPS阈值
    3. Warm Up:根据codeFactor(冷加载因子,默认3)的值,从阈值codeFactor,经过预热时长,才达到设置的QPS阈值

二、流控演示

1. QPS > 直接 > 快速失败

每秒中请求数量,达到阈值,进行限流
image.png

频繁刷新该接口,进行大量访问,发现已经限流
image.png

2. QPS > 直接 > Warm Up

预热,warm up默认加载因子为3
com.alibaba.csp.sentinel.slots.block.flow.controller.WarmUpController
image.png

如果设置预热时长为5秒,阈值为12. 那么,阈值/3 = (4),阈值经过5秒后,阈值才缓慢加载到12,但请求不超过12.

image.png
从上图可以看出,当请求数直线上升时,拒绝线缓慢下降,当达到5秒后,就归为0

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

3. QPS > 直接 > 排队等待

匀速排队
匀速排队( RuleConstant.cONTROL_BEHAVIOR_RATE_LIMTITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。详细文档可以参考流量控制-匀速器模式,具体的例子可以参见PaceFlowDemo.
该方式的作用如下图所示:
image.png
这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。

image.png
image.png
匀速排队,让请求以均匀的速度通过,阀值类型必须设成QPS,否则无效。
设置含义:/testA每秒1次请求,超过的话就排队等待,等待的超时时间为20000毫秒。

4. QPS > 关联 > 直接失败

当与A关联的资源B达到阈值后,就限流自己

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

多次请求,/testB后,再去请求/testA发现已经被限流
image.png
image.png
image.png

4. QPS > 链路 > 直接失败

打开簇点链路,查看/testA的入口资源为sentinel_web_servlet_context
image.png

image.png

查看请求访问图
image.png

其他没有演示的类型,都可以在上边例子中,进行组合

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。