常见保护措施
限流算法
漏桶算法
漏桶算法的主要思想如下:
- 漏桶容量固定,按照固定速率流出水滴直到桶变空;
- 水滴可以以任意速率流入漏桶,如果桶满则溢出(丢弃);
令牌桶算法
令牌桶算法的主要思想如下:
- 桶的容量固定,令牌被按照固定的速率加入到桶中;
- 桶满则溢出(丢弃);
- 请求到来时先获取令牌,获取到则进行处理,否则阻塞、等待或者拒绝;
Guava的RateLimiter提供了实现。
Nginx层限流
Nginx自带了两个模块:连接数限流模块ngx_http_limit_conn_module和漏桶算法实现的请求限流模块ngx_http_limit_req_module。此外,还可以与Lua脚本结合实现简单限流逻辑。