平稳限流?突发限流?还是时间窗口?三种限流算法分析与对比

漏桶限流算法和令牌桶限流算法是两种常见的限流算法,它们的原理和实现方式有所不同。

漏桶限流算法

漏桶限流算法是一种固定容量的桶,水以恒定的速率流出,来限制请求的流量。当请求到来时,会先加入到漏桶中,漏桶以恒定的速率处理请求,处理不了的请求会被丢弃。

以下是漏桶限流算法的流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cg9NMJwF-1683432698692)(https://ask8088-private-1251520898.cos.ap-guangzhou.myqcloud.com/developer-images/article/2871589/07qzkwb038.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1683432703%3B1683439903&q-key-time=1683432703%3B1683439903&q-header-list=&q-url-param-list=&q-signature=26a31993a6074b55bd17a609b637937103d02157)]

漏桶限流算法的优点是可以平滑限制请求的流量,缺点是在处理突发流量时效果不佳。

这张图中,当请求到来时,先将其加入到漏桶中,如果漏桶已经满了,则拒绝该请求;否则,处理该请求,并让漏桶自动漏水。最后,漏桶重新处于空闲状态,可以接受下一个请求。注意,漏水并不是回到“Add to bucket”这个步骤,而是相当于让漏桶自动清空一部分水。

令牌桶限流算法

令牌桶限流算法也是一种固定容量的桶,但它的工作方式略有不同。在令牌桶限流算法中,桶中存放着令牌,每个令牌代表着一定的处理能力,每当请求到来时,需要从桶中获取一个令牌才能被处理,如果没有令牌则请求会被丢弃。

以下是令牌桶限流算法的流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GWGcx39P-1683432698694)(https://ask8088-private-1251520898.cos.ap-guangzhou.myqcloud.com/developer-images/article/2871589/rwi3ew08vj.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1683432703%3B1683439903&q-key-time=1683432703%3B1683439903&q-header-list=&q-url-param-list=&q-signature=d6895a88676238e7687d593f7742f9abe9dac2ae)]

令牌桶限流算法的优点是可以应对突发流量,缺点是不能平滑限制请求的流量。

时间窗口限流算法

时间窗口限流算法是一种基于时间窗口的限流算法,其主要思想是将请求的流量限制在每个时间窗口内的一定数量。算法过程如下:

  1. 初始化一个时间窗口和一个计数器,计数器初始值为0。
  2. 每当一个请求到达时,将计数器加1。
  3. 如果当前时间已经超过了当前时间窗口的结束时间,说明当前时间窗口已经过期,需要切换到下一个时间窗口,并且将计数器重置为1。
  4. 如果当前计数器的值已经达到了时间窗口内的限制值,就拒绝该请求。
  5. 处理请求。
  6. 重复步骤2-5,直到程序结束。

下面是该算法的流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItrnDxnz-1683432698695)(https://ask8088-private-1251520898.cos.ap-guangzhou.myqcloud.com/developer-images/article/2871589/bwsbpni9i0.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1683432703%3B1683439903&q-key-time=1683432703%3B1683439903&q-header-list=&q-url-param-list=&q-signature=353e944c17d7d877927c7693f5c3b91da155b712)]

其中,计数器用于统计当前时间窗口内的请求数量,每当有请求到达时,就将计数器加1。如果当前计数器的值已经达到了时间窗口内的限制值,就拒绝该请求。每当一个时间窗口结束时,会切换到下一个时间窗口,并且将计数器重置为1。如果当前时间已经超过了当前时间窗口的结束时间,说明当前时间窗口已经过期,需要切换到下一个时间窗口。处理完一个请求后,重复执行步骤2-5,直到程序结束。

漏桶算法和令牌桶算法的区别

漏桶限流算法时序图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Hy01RO2-1683432698695)(https://ask8088-private-1251520898.cos.ap-guangzhou.myqcloud.com/developer-images/article/2871589/k565h3xco1.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1683432703%3B1683439903&q-key-time=1683432703%3B1683439903&q-header-list=&q-url-param-list=&q-signature=63a18953d1ea253b9dc5742835d7b71965a3eda7)]

在这个时序图中,我们可以看到漏桶限流算法的主要工作流程。每当一个请求到来时,它会被添加到桶中。如果桶已满,则请求将被拒绝。否则,请求将被处理,并从桶中流出。

令牌桶限流算法时序图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xjy9uws-1683432698695)(https://ask8088-private-1251520898.cos.ap-guangzhou.myqcloud.com/developer-images/article/2871589/xy5rqzopsw.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1683432703%3B1683439903&q-key-time=1683432703%3B1683439903&q-header-list=&q-url-param-list=&q-signature=766c933fb416f944451e4fc8d3da7f6e0e6b67dc)]

在这个时序图中,我们可以看到令牌桶限流算法的主要工作流程。每当一个请求到来时,它需要从桶中获取一个令牌才能被处理。如果没有令牌可用,则请求将被拒绝。否则,请求将被处理,并在处理完成后将令牌归还给桶。

通过这些时序图,我们可以更好地了解漏桶限流算法和令牌桶限流算法的区别。漏桶限流算法按照恒定的速率处理请求,无法应对突发流量;而令牌桶限流算法则通过控制令牌的数量来限制请求的流量,能够更好地应对突发流量。

时间窗口算法和令牌桶算法的区别

以下是时间窗口限流算法的时序图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A50R0Uph-1683432698696)(https://ask8088-private-1251520898.cos.ap-guangzhou.myqcloud.com/developer-images/article/2871589/b3dy10fe0a.png?q-sign-algorithm=sha1&q-ak=AKID2uZ1FGBdx1pNgjE3KK4YliPpzyjLZvug&q-sign-time=1683432703%3B1683439903&q-key-time=1683432703%3B1683439903&q-header-list=&q-url-param-list=&q-signature=b2095d99f41603cbf85821514f7b85c7741b31cf)]

在这个时序图中,与令牌桶算法的时序图相比,没有令牌生成和归还的过程。相反,每当一个请求到达时,时间窗口计数器会将当前时间窗口内的请求数量加1。如果计数器的值超过了预设的阈值,那么请求将被拒绝。否则,请求将被处理。

请注意,与令牌桶算法不同,时间窗口限流算法不会记录过多的令牌或请求。相反,它仅仅通过计数器来限制请求流量。因此,它的实现更加简单,但是它也可能会在某些情况下产生较大的峰值请求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值