使用的是sentinel-dashboard来配置

流控规则

在这里插入图片描述
阈值类型

  • QPS 当每秒并发数大于配置,则进行限流
  • 并发数线程数 当执行的线程数大于配置,则进行限流

单机阈值

  • 配置的具体值

流控模式

  • 直接 默认项,就是在资源名配置的路径进行生效

  • 关联:被关联的资源达到阈值后,当前配置的资源会被限流。
    在这里插入图片描述
    如图,当资源test-b达到阈值后,test-a会被限流

  • 链路 入口资源达到阈值后,当前配置的资源会被限流。
    在这里插入图片描述
    如图,sentinel中所有的最开始的入口资源都是sentinel_spring_web_context,如果此资源达到阈值,则test-a会被限流

流控效果

  • 快速失败 默认项,直接进行流控
  • warm up 当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。warm up冷启动主要用于启动需要额外开销的场景,例如建立数据库连接,秒杀等等,防止服务瞬间被打垮。其实就是根据冷加载因子,默认3,经过一段时间,才能达到预设的QPS。
    在这里插入图片描述
    如图,意思是初始阈值为10/3 = 3,在6秒内到达QPS到达10。
  • 排队等待 当达到阈值,请求进行排队一个一个的通过执行,如果等待时间超过2000ms,则抛出异常
    在这里插入图片描述

熔断规则

熔断策略

  • 慢调用比例 要同时满足两个条件才能够熔断

    • 请求数大于最小请求数
    • 慢请求数(执行时间大于最大RT)达到设置的比例,也就是执行时间大于最大RT的次数*比例阈值
      在这里插入图片描述
    • 如图,在统计时长1000ms内,请求数目大于设置的最小请求数目10,并且慢调用的比例大于阈值,熔断时长5s内自动触发熔断(调用方法时,抛出DegradeException)
    • 熔断恢复:在熔断时长后,熔断器进入探测恢复状态(half-open状态),
      如果接下来的请求响应时间 < 设置的最大RT响应时间,则结束熔断
      如果接下来的请求响应时间 > 设置的最大RT响应时间,则继续在熔断时长内保持熔断
  • 异常比例 依旧要同时满足两个条件才能够熔断

    • 请求数大于最小请求数
    • 异常比例达到50%
      在这里插入图片描述
    • 如图,在统计时长1000ms内,请求数目大于设置的最小请求数目10,并且异常的比例大于50%,熔断时长5s内自动触发熔断(调用方法时,抛出DegradeException)
  • 异常数 依旧要同时满足两个条件才能够熔断

    • 请求数大于最小请求数
    • 异常数大于设置的值
      在这里插入图片描述
    • 如图,在统计时长1000ms内,请求数目大于设置的最小请求数目10,并且异常数大于10,熔断时长5s内自动触发熔断(调用方法时,抛出DegradeException)

注意异常降级仅针对业务异常,对 Sentinel 限流降级本身的异常(BlockException)不生效。为了统计异常比例或异常数,需要通过 Tracer.trace(ex) 记录业务异常

热点规则

在这里插入图片描述

  • 如图,test-a接口如果有第一个参数,那么每秒的QPS阈值为10,如果第一个参数值为String类型,值为"student-1",QPS阈值为15

系统规则

系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 LoadRT入口 QPSCPU 使用率和线程数五个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。 系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量 (进入应用的流量) 生效。

  • Load(仅对 Linux/Unix-like 机器生效) 当系统 load1 超过阈值,且系统当前的并发线程数超过 系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般 是 CPU cores * 2.5。
  • RT 当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
    线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
  • 入口QPS 当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。
  • CPU使用率 当单台机器上所有入口流量的 CPU使用率达到阈值即触发系统保护
    在这里插入图片描述

压测

压测接口

在这里插入图片描述
/testSentinel为接口,/testSentinelRpc为接口内的feign调用

流控规则

直接模式

对/testSentinel进行流控
在这里插入图片描述
结果
在这里插入图片描述
对/testSentinelRpc进行流控
在这里插入图片描述
结果
在这里插入图片描述
/testSentinelRpc为feign当被流控后会直接执行@FeignClient中的fallback处理类的方法

关联模式

在这里插入图片描述
结果
在这里插入图片描述
设置为/testSentinelV2关联/testSentinel,当/testSentinel达到设置的阈值后,/testSentinelV2会被流控

链路模式

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

链路模式和直接模式结合

链路流控阈值为20,接口流控阈值为10
在这里插入图片描述
在这里插入图片描述
结果是当阈值超过10会进行流控
在这里插入图片描述
链路流控阈值为10,接口流控阈值为20
在这里插入图片描述
在这里插入图片描述
结果依旧是阈值超过10会进行流控
在这里插入图片描述

流控效果

warm up

在这里插入图片描述
结果
在这里插入图片描述在这里插入图片描述
可以看出warm up模式整个过程是生效的

排队等待

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

熔断规则

在这里插入图片描述
首先每秒15请求数,隔一段时间后为每秒5请求数进行压测
在这里插入图片描述
在这里插入图片描述
可以看到熔断是生效的

GitHub 加速计划 / sentine / Sentinel
22.24 K
7.98 K
下载
alibaba/Sentinel: Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制、熔断降级组件,提供实时监控、限流、降级和系统保护功能,适用于微服务治理场景。
最近提交(Master分支:3 个月前 )
195150bc * fix issue 2485 which occur oom when using async servlet request. * optimize imports * 1. fix the same issue in the webmvc-v6x 2. improve based on review comments 2 个月前
b78b09d3 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐