Spring Cloud - 微服务限流的方式
1. 限流的目的
① 并发量较大(突发流量)
② 防止用户恶意刷接口
2. 限流的方式
① Tomcat,可以设置最大连接数
② Nginx,漏桶算法
① 控制速率(突发流量)
漏桶的配置:
语法解析:
命令 limnit_req_zone key zone rate
key:定义限流的对象,binary_remote_addr就是一种key,是基于客户端ip限流
zone:定义共享存储区存储访问信息,10m表示可以存储16万个ip地址访问信息
rate: 最大访问速率 rate=10r/s 表示每秒最多处理10个请求
burst = 20 :相当于桶的大小为20,能容纳20个请求
nodelay:快速处理模式
② 控制并发连接数
limit_coon perip 20 : 对应的key是 $binary_remote_addr,表示限制单个IP同时最多持有20个连接
limit_coon perserver 100 : 对应的key为$server_name,表示虚拟主机(server)同时能够处理的并发连接数的总数
③ 网关,令牌桶算法
yml配置文件中,微服务路由设置添加局部过滤器 RequestRateLimiter,需要搭配Redis使用。
key-resolver:定义限流的对象(ip、路径、参数),须有代码实现,使用spel表达式取值
replenishRate:令牌桶每秒填充的平均速率,每秒生成多少个令牌
urstCapacity:令牌桶的总容量
④ 自定义拦截器
该方式不常用