限流方案
高并发的情况下难免会用到限流方案的,这里仅提供思路
1. 合法性限流
高级验证码 + IP黑名单(短时间的操作)
2. 容器限流
Tomcat:设置最大线程数maxThread,超过则会排队
Nginx:控制速率、控制并发连接数
# 控制同一IP的访问频率,下面的5作为一个缓存数,即超过1r/s的请求,放入5个进缓存池,后面的拒绝掉
limit_req_zone $binary_remote_addr zone=rateLimit:10m rate=1r/s;
server {
limit_req zone=rateLimit burst=5 nodelay;
}
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
limit_conn perip 1;
limit_conn perserver 2;
}
3. 服务端限流
限流算法:
- 漏桶算法:用redis的cell模块可以实现
- 令牌算法:Google 开源的 guava 包实现