参考:
1. 限流的作用
限流主要的作用是保护服务节点或者集群后面的数据节点,防止瞬时流量过大使服务和数据崩溃(如前端缓存大量实效),造成不可用;还可用于平滑请求。
2. 限流算法
限流算法有两种:
- 一种就是简单的请求总量计数
- 一种就是时间窗口限流(一般为1s),如令牌桶算法和漏牌桶算法就是时间窗口的限流算法
令牌桶算法(token Bucket)
- 系统以固定速率将令牌放入一个固定容量的令牌桶中,当令牌桶满时,系统将放弃添加新的令牌到桶中
- 客户的每一次请求都会消耗桶中的令牌,当桶中没有令牌时则放弃这次请求或者等待直到桶有新的令牌添加。
漏桶算法(Leaky Bucket)
漏桶算法和令牌桶算法思路一样
- 每一次请求都将令牌放入令牌桶中,如果桶满则放弃这次请求或者等到桶为空
- 系统以固定的速度消耗令牌直到桶为空
可以看出来和令牌桶思路一样,只是角色互换,方向相反,实现上可以使用第三方框架来学习,也可以使用Java阻塞队列来实现,或者使用Redis的List来实现。
时间: 2024-10-25 17:48:37