前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不耽误你赶2路公交车!只需5分钟,了解常见的四种限流算法

不耽误你赶2路公交车!只需5分钟,了解常见的四种限流算法

作者头像
爪哇缪斯
发布2023-09-05 18:52:33
1420
发布2023-09-05 18:52:33
举报
文章被收录于专栏:爪哇缪斯

一、计数器算法

在指定周期内累加访问次数,当访问次数达到设定的阈值时,触发限流策略,当进入下一个时间周期时进行访问次数的清零。如图所示,我们要求3秒内的请求不要超过150次:

但是,貌似看似很“完美”的流量统计方式其实存在一个非常严重的临界问题,即:如果第2到3秒内产生了150次请求,而第3到4秒内产生了150次请求,那么其实在第2秒到第4秒这两秒内,就已经发生了300次请求了,远远大于我们要求的3秒内的请求不要超过150次这个限制,如下图所示:

二、滑动窗口算法

滑动窗口为固定窗口的改良版,解决了固定窗口在窗口切换时会受到两倍于阈值数量的请求,滑动窗口在固定窗口的基础上,将一个窗口分为若干个等份的小窗口,每个小窗口对应不同的时间点,拥有独立的计数器,当请求的时间点大于当前窗口的最大时间点时,则将窗口向前平移一个小窗口(将第一个小窗口的数据舍弃,第二个小窗口变成第一个小窗口,当前请求放在最后一个小窗口),整个窗口的所有请求数相加不能大于阈值。其中,Sentinel就是采用滑动窗口算法来实现限流的。如图所示:

【1】 把3秒钟划分为3个小窗,每个小窗限制请求不能超过50秒。 【2】 比如我们设置,3秒内不能超过150个请求,那么这个窗口就可以容纳3个小窗,并且随着时间推移,往前滑动。每次请求过来后,都要统计滑动窗口内所有小窗的请求总量。

三、令牌桶限流算法(控制令牌生成速度,取的速度不控制)

令牌桶是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。对于每一个请求,都需要从令牌桶中获得一个令牌;如果没有获得令牌,则需要触发限流策略。系统会以恒定速度(r tokens/sec)往固定容量的令牌桶中放入令牌令牌桶有固定的大小,如果令牌桶被填满,则会丢弃令牌

会存在三种情况:

请求速度 大于 令牌生成速度】当令牌被取空后,会被限流 【请求速度 等于 令牌生成速度】流量处于平稳状态 【请求速度 小于 令牌生成速度】请求可被正常处理,桶满则丢弃令牌

如图所示:

四、漏桶限流算法(控制水滴流出速度,不控制水滴产生速度)

主要的作用:

【1】 控制数据注入网络的速度。 【2】 平滑网络上的突发流量。

漏桶限流算法的核心就是:不管上面的水流速度有多块,漏桶水滴的流出速度始终保持不变消息中间件就采用的漏桶限流的思想。如图所示:

往期推荐

双亲委派机制,懂吧~ 那什么情况下需要破坏它,知道吗?

我国出租车行业的发展伪历史(依赖倒置)

忘记LockSupport怎么用了?那我们举个有趣的小例子,永远记住它!

(八)Spring源码解析:Spring MVC

(七)Spring源码解析:Spring事务

(六)Spring源码解析:Spring AOP源码解析

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、计数器算法
  • 二、滑动窗口算法
  • 三、令牌桶限流算法(控制令牌生成速度,取的速度不控制)
  • 四、漏桶限流算法(控制水滴流出速度,不控制水滴产生速度)
  • 往期推荐
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档