nginx 限流熔断
令牌桶算法
- 思想 :
- 令牌以固定速率产生 , 并缓存到令牌桶中
- 令牌桶放慢时 , 多余的令牌被丢弃
- 请求要消耗等比例的令牌才能被处理
- 令牌不够时, 请求被缓存
漏桶算法
- 思想 :
- 将请求放入 “漏桶” 中 , “漏桶” 中的请求 “依次” 被处理
- “漏桶” 中的请求按固定速率被处理
- 当 “漏桶” 未满时 , 将发送而来的请求,缓存进 “漏桶” , 当 “漏桶” 满后 , 再发送而来的请求不做处理(丢弃)
- [缓存请求、匀速处理、多余的请求直接丢弃]
- 令牌算法与漏桶的差异 :
- 令牌桶算法 需要具有"桶"与队列 , "桶"用来存放请求 , 队列用来存放请求
- 令牌桶算法能够很好应对处理突发流量
- 漏桶算法可以强行限制数据的实时传输速率,对突发流量不做处理,而令牌桶算法可以在限制数据的平均的平均传输速率的同事允许某种程度上的突发速率
Nginx 按请求速率限速模块使用的是漏桶算法 , 在能保证请求的实时处理速度的情况下不超过阈值
Nginx 配置示例
http {
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;
...
server {
...
location /download/ {
limit_req zone=ip_limit burst=15 nodelay;
}
参考网址 : Nginx限流