一线大厂面试题-常见的限流算法有哪些

本文介绍了限流算法,包括计数器限流、滑动窗口限流(如SpringCloud的Hystrix和Sentinel)、漏桶算法和令牌桶算法。强调了选择算法时对统计精度和场景需求的考虑,以及令牌桶算法在处理突发流量的优势。
摘要由CSDN通过智能技术生成

限流算法是一种系统保护策略,主要是避免在流量高峰导致系统被压垮,造成系统不可用的问题。

1.     (如图)  计数器限流,一般用在单一维度的访问频率限制上 ,比如短信验证码每隔 60s 只能发送一次 ,或者接口调用次数等它的实现方法很简单 ,每调用一次就加 1 ,处理结束以后减一。

2.     (如图)  滑动窗口限流,本质上也是一种计数器,只是通过以时间为维度的可滑动 窗口设计 ,来减少了临界值带来的并发超过阈值的问题。

每次进行数据统计的时候 ,只需要统计这个窗口内每个时间刻度的访问量就可以了。   Spring Cloud 里面的熔断框架 Hystrix  ,以及 Spring Cloud Alibaba 里面的 Sentinel 都采用了滑动窗口来做数据统计。

3.     (如图)漏桶算法 ,它是一种恒定速率的限流算法,不管请求量是多少 ,服务端的处理效率是恒定的。基于MQ 来实现的生产者消费者模型,其实算是一种漏桶限流算法。

4.     (如图)  令牌桶算法 ,相对漏桶算法来说 ,它可以处理突发流量的问题。

它的核心思想是,令牌桶以恒定速率去生成令牌保存到令牌桶里面,桶的大小是固定的, 令牌桶满了以后就不再生成令牌。

每个客户端请求进来的时候 ,必须要从令牌桶获得一个令牌才能访问 ,否则排队等待。 在流量低峰的时候,令牌桶会出现堆积,因此当出现瞬时高峰的时候,有足够多的令牌 可以获取 ,因此令牌桶能够允许瞬时流量的处理。

网关层面的限流、或者接口调用的限流,都可以使用令牌桶算法,像 Google 的 Guava, 和Redisson 的限流 ,都用到了令牌桶算法。

限流的本质是实现系统保护,最终选择什么样的算法,一方面取决于统计的 精准度 ,另一方面考虑限流维度和场景的需求。
 

  • 26
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值