容器限流
Tomcat 限流
- 在 server.xml 文件设置最大线程数
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="110"
redirectPort="443" />
Nginx 限流
- 控制速率
- 使用
limit_req_zone限制单位时间内的请求数
- 使用
- 控制并发数
- 使用
limit_conn_zone和limit_conn控制并发数
- 使用
服务端限流
时间窗口算法
- 固定时间窗口
- 使用Redis的有序集合实现
- 滑动时间窗口
漏桶算法
- 使用 Redis-Cell 实现
令牌算法
- 使用 Google 的 guava 包来实现
已实现的限流方案
- 分布式
- Redis 实现分布式限流方案
- 单机环境
- Guava 实现单机服务限流