1.2 流量控制

一、快速入门

  1. 簇点链路

    1. 就是项目内的调用链路,链路中被监控的每一个接口就是一个资源。默认情况下sentinel会监控SpringMVC的每一个断电,因此SpringMVC的每一个端点就是调用链路中的一个资源

二、流控模式

  1. 流控,熔断等都是针对簇点链路中的资源来设置的,因此我们可以点击对应资源后面的按钮来设置规则(模拟测试工具:JMeter):

    1. 流控:针对某个资源进行控制,阈值QPS,单机阈值标识每秒钟允许请求1次,超出请求会报错

    2. 流控模式:

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

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

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

        备注1:Sentinel默认只标记Controller中的方法为资源,如果要标记其他方法,需要使用@SentinelResource注解

        ​ 举例:@SentinelResource("名称")

        备注2:Sentinel默认会将Controller方法作为context,导致链路模式的流控失效,需要对application.yml进行配置:

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

        也就是链路模式,必须关闭web-context-unify

三、流控效果

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

    1. 快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常,默认处理方法

    2. warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式的阈值会动态变化,从一个较小值主键增加到最大阈值

      1. 是对应服务冷启动的一种方案,请求阈值初始值是threshold/coldFactor,持续指定时长后,逐渐提高到threshold值,coldFactor默认值是3;

      2. 所以重要参数是threshold-最大qps值,还有预热时长

    3. 排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长

      1. 如果等待时间超过超时时间,则会被直接拒绝

      2. 重要参数:超时时长,单位:毫秒

四、热点参数限流

  1. 之前的限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值

  2. 重要参数:

    1. 参数索引:第几个参数

    2. 单机阈值:阈值

    3. 统计窗口时长:多长时间内

  3. 高级配置:

    1. 列外参数值:热点不同,限流不同

  4. 注意:

    1. 热点参数限流对默认的SpringMVC资源无效,解决办法,在控制器上添加注解@SentinelResource("名称")

    2. 在左侧列表菜单点击热点,添加热点参数

最后更新于

这有帮助吗?