写点什么

限流不只有计数器,带你快速了解四种经典限流算法实现

作者:知识浅谈
  • 2022 年 8 月 03 日
  • 本文字数:1099 字

    阅读完需:约 4 分钟

限流不只有计数器,带你快速了解四种经典限流算法实现

🍁 作者:知识浅谈,CSDN 签约讲师,后端领域优质创作者,阿里云社区技术博主,热爱分享创作

📌 擅长领域:全栈工程师、爬虫、ACM 算法

💒 公众号:知识浅谈

🔥 联系方式 vx:zsqtcc


四种经典限流算法实现总结🤞这次都给他拿下🤞


正菜来了⛳⛳⛳

🎈业务中的限流场景

最常见的就三种情况:突发流量,恶意流量,业务本身需要。

🍮突发流量

如我们常见的双十一,京东 618 这些整点秒杀的业务,12306 这些都会出现某段时间面临着大量的流量流入的情况。


🍮恶意流量

比如我们常见的网络爬虫,恶意的流量攻击网站等等,都会产生大量的恶意流量。


🍮业务本身需要

如我们不同版本对流量的控制力度不一样,分别对应着不同的业务。


四种限流大法

温馨提醒:这个有点用,请仔细看下去

🍮基于技术的限流器


📐Eg:在一个时间段内使用一个技计数器记数,当有流量来的时候计数器就加一,在这个时间段内,达到了一定的大小,就会对流量进行控制,每个时间段会重置流量计数器。


📐这个方法,当然是既简单又直观,但有一个很大的问题:我们没法细粒度地控制流量在定时区间内的平滑性,流量依旧可以出现尖刺。


计数器算法会产生临界问题:就比如,在前一个时间段的最后和下一时间段的开始,瞬间到来大量请求打到服务器上,这时候就会出问题。



为了解决上边的临界问题,提出了下边的方法

🍮基于滑动窗口的限流


📐其实这个方法就是把上边的粒度进行切分,切分成更小力度的计数器,就像是上边的切分成一小块一小块,每块时间超出了指定的请求就阻挡在外,越小力度,则限流越好。


📐我们遍历过去一分钟内每个独立区间,也就是每 10 秒内的计数器的计数总和,这个总和当然就是过去一分钟内全部的请求数量了。当然每次经过 10$,我们也自然需要把整个计数区间往右边移动一格。


因为滑动窗口是以内存块一块块存储给内存造成压力,给服务器处理达赖一定负担,所以就有下边的解决方法。

🍮漏桶算法


📐只要我们能让漏洞漏水的消费速度可控、稳定,整个系统只处理漏桶漏出的稳定流量,自然就可以达到限流的效果。漏桶这样严格完美的流量限制策略,也使得它完全放弃了应对突发流量的能力,也是使用定速处理请求的速率。


📐因为如果有突发的流量我们有时候也希望给予一些支持,但是漏桶算法是直接抛弃多余的请求,因此引出了以下方法。

🍮令牌桶算法


📐这个不再是使用定速处理流出的速率,即请求的速率。而是把令牌以稳定的速度放入桶中,请求来时获得令牌桶中的令牌。


📐如果在一段时间内,请求的速度都是高于令牌放入的速度,令牌桶中很快就会没有令牌可用了,服务就会拒绝一部分请求,并保证系统处理的流量在我们的控制范围内。


这个算法已经在 google 中的 guava 使用了。

🍚总结

四种方法终于总结完了,希望对你有所帮助,别忘了素质三联哦。

发布于: 29 分钟前阅读数: 6
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

🍁 作者:知识浅谈,CSDN签约讲师,后端领域优质创作者,阿里云社区技术博主,热爱分享创作 💒 公众号:知识浅谈 📌 擅长领域:全栈工程师、爬虫、ACM算法 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
限流不只有计数器,带你快速了解四种经典限流算法实现_8月月更_知识浅谈_InfoQ写作社区