【Java面试】常见的限流算法有哪些?

一个在传统行业工作了5年的程序员。

去一个互联网公司面试,遇到了一个限流的问题。

因为之前完全没接触过分布式这块的项目,所以根本就回答不上来,向我来求助。

其中有一个问题是:”请你说一下常见的限流算法“。

对于这个问题,看看普通人和高手的回答。

需要高手面试文档(附赠阿里内部十万字面试文档)的小伙伴可以扫描文章底部二维码

普通人:

嗯。。。。。。。。。。。。。。

高手:

好的,关于这个问题,我会从几个方面来回答。

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

常见的限流算法有5种。

  1. 计数器限流,一般用在单一维度的访问频率限制上,比如短信验证码每隔60s只能发送一次,或者接口调用次数等

    它的实现方法很简单,每调用一次就加1,处理结束以后减一。

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

    每次进行数据统计的时候,只需要统计这个窗口内每个时间刻度的访问量就可以了。

    Spring Cloud里面的熔断框架Hystrix , 以及Spring Cloud Alibaba里面的Sentinel都采用了滑动窗口来做数据统计。

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

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

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

    每个客户端请求进来的时候,必须要从令牌桶获得一个令牌才能访问,否则排队等待。

    在流量低峰的时候,令牌桶会出现堆积,因此当出现瞬时高峰的时候,有足够多的令牌可以获取,因此令牌桶能够允许瞬时流量的处理。

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

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

以上就是我对这个问题的理解

总结

英国生物学家Charles Darwin(查尔斯.达尔文)说过。

最终能够在社会上生存下来的人,不是强者,也不是智者,而是能够适应改变的人。 技术开发虽然是谋生手段,但是技术能力的高低决定了职业发展的高度。

喜欢的朋友记得点赞和收藏。

有任何工作和学习上的问题,可以随时私信我。

需要高手面试文档(附赠阿里内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以扫描下方二维码

↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跟着Mic学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值