一、限流目的
限流算法是一种系统保护策略,主要是避免流量高峰导致系统被压垮,造成系统不可用的问题
二、常见的限流算法
- 计数器限流:一般用在单一维护的访问频率限制上(如短信验证码每60s只能发送一次)
- 滑动窗口限流:本质也是计数器,区别是通过时间为维护的可滑动窗口设计,来减少临界值带来的并发超过阈值的问题(如限制过去1小时内只能发10次动态,过去24小时内只能发100条动态等)
- 常见框架:如Spring Cloud的熔断框架Hystrix,Alibaba的Sentinel都用了滑动窗口来做数据统计
- 常见框架:如Spring Cloud的熔断框架Hystrix,Alibaba的Sentinel都用了滑动窗口来做数据统计
- 漏桶算法:是一种恒定速率的限流算法,不管请求量是多少,服务端的处理速率是恒定的
- 实现:如基于MQ实现的生产者消费者模型也算漏桶算法
- 实现:如基于MQ实现的生产者消费者模型也算漏桶算法
- 令牌桶算法:相比漏桶算法来说,它可以处理突发流量的问题
- 实现:令牌桶以恒定速率去生成令牌,桶大小是固定的,满了就不再生成。客户端请求的时候,会获取一个令牌才能访问,否则只能排队等待
- 能够处理突发流量原理:流量低峰的时候,令牌桶会出现堆积。因为出现瞬时高峰的时候,会有足够多的令牌可以获取,因此令牌桶可以允许瞬时流量的处理
- 例子:如网关层面的限流、或者接口调用的限流,都可以使用令牌桶算法,如Google的Guava、Redisson的限流,都用到了令牌桶节奏