服务限流
为什么要限流?
- 并发的确大(突发流量)
- 防止用户恶意刷接口
限流的实现方式
- Tomcat:可以设置最大连接数
- Nginx,漏桶算法
- SpringGateway网关,令牌桶算法
- 自定义拦截器
Nginx限流
控制流速
Nginx配置文件
语法:
limit_req_zone key zone rate
key:定义限流对象,binary_remote_addr就是一种key,表示使用客户端的IP地址作为限流键
zone:service1RateLimit:10m表示创建一个名为service1RateLimit的限流区域,大小为10兆字节(代表限流区域可以存储的键值对数量)
rate:最大访问速率,rate=10r/s表示流速为每秒处理10个请求
burst=20:相当于桶的大小
nodelay:快速处理

控制并发连接数
Nginx配置文件
limit_conn perip 20:对应的key是$binary_remote_addr,表示限制单个IP同时最多能持有20个连接。
limit_conn perserver 100:对应的key是$server_name,表示虚拟主机(server) 同时能处理并发连接的总数。
Gateway限流
yml配置文件中,微服务路由设置添加局部过滤器RequestRateLimiter
key-resolver:定义限流对象( ip 、路径、参数),需代码实现,使用spel表达式获取replenishRate:令牌桶每秒填充平均速率。urstCapacity:令牌桶总容量。
