[toc]

一、热点限流

image.png

热点限流:针对参数进行限流

1. 编写代码

    @GetMapping("/testHotKey")
    @SentinelResource(value = "testHotKey")
    public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
                             @RequestParam(value = "p2",required = false) String p2) {
        return "------testHotKey";
    }

2. sentinel配置热点限流

image.png
配置说明:testHotKey资源,限制下标为0的参数,阈值为1,统计窗口为1秒
image.png

3. 测试

测试接口:http://localhost:8401/testHotKey?p2=11
测试类型:GET
测试目标:只传p2,下标为1的参数
测试结果:
频繁刷新,发现没有被限流
image.png

测试接口:http://localhost:8401/testHotKey?p1=abc&p2=11
测试类型:GET
测试目标:传p1、p2,关注下标为0的参数
测试结果:
点击一次,结果
image.png

频繁点击,结果
image.png

image.png

发现p1参数已经限流,其他参数正常访问

4. 例外项限流(例外)

例外项:在限流的参数里,如果参数为某个值得时候,不进行设置。

进行配置
当值为5时,最大请求为3
image.png

5. 测试例外项

测试接口:http://localhost:8401/testHotKey?p1=5&p2=3
测试类型:GET
测试目标:测试下标为0的参数p1,其值为5,限流为3
频繁刷新
image.png

图表展示
image.png

二、系统限流

项目整体限流

官方地址:https://github.com/alibaba/Sentinel/wiki/系统自适应限流

image.png

1. 限流说明

系统保护规则是从应用级别的入口流量进行控制,从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和并发线程数等几个维度监控应用指标,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量生效。入口流量指的是进入应用的流量(EntryType.IN),比如 Web 服务或 Dubbo 服务端接收的请求,都属于入口流量。

系统规则支持以下的模式:

  1. Load 自适应(仅对 Linux/Unix-like 机器生效):系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5。
  2. CPU usage(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。
  3. 平均 RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
  4. 并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
  5. 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

1. 设置配置

项目整体限流为2的并发量
image.png

2. 测试

测试接口:http://localhost:8401/testA
测试类型:GET
测试结果:

image.png

image.png

当请求数超过2的时候,就会被触发限流

Q.E.D.


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