漏桶算法、令牌桶算法


本文介绍 2 种常见的限流算法:漏桶算法、令牌桶算法

示意图:a 为漏桶算法,b 为令牌桶算法。
image.png

漏桶算法

漏桶算法的基本原理是,水(即 请求)从进水口流入漏桶,同时漏桶出水口以恒定的速率出水(对应请求放行);漏桶的容量是固定的,当漏桶被充满时,再入水就会溢出,即请求被拒绝。

细节如下:

  • 水以任意速率流入桶中,即请求到来的速度是不确定的。
  • 水以固定速率从桶中流出,即限制住了请求处理的速率为某一固定速率。
  • 漏桶的容量是固定的,当入水的速度(请求到来的速度)大于 出水的速度(请求处理的速度),漏桶就会被充满,水就会溢出(请求被拒绝)。

优点

  • 可以保持稳定的流量输出速率,避免突发请求对系统造成过载。
  • 实现较为简单

缺点

  • 漏桶的出水速率是固定的,对于突发流量的处理缺乏效率、灵活性(说明:即使有突发流量进来,请求处理的速率还是那么多,并没有动态地调整处理速率)

令牌桶算法

令牌桶算法的大致原理是,想象有一个存放令牌的桶,以固定的速度生成令牌并放入桶中;每次请求被处理,都会消耗一定数量的令牌;当桶中的令牌数量不足时,请求就会被拒绝。

细节说明:

  • 桶的容量大小(即最多能够存放多少令牌)是固定的
  • 生成令牌的速率,决定了请求处理的平均速率。如,每秒生成 2 个令牌,每个请求消耗 1 个令牌,那么请求处理的平均速率就是:2 / 1 = 2,即每秒处理 2 个请求。
  • 令牌桶算法 能够处理短暂突发流量,短时间内较多请求进来,只要桶中有足够的令牌,那么这些请求就能够被处理。但是长期来看,请求处理的速率还是趋于设定好的平均速率(由放入令牌的速率决定)。

优点

  • 通过以固定的速度生成令牌,可以平稳地控制流量
  • 可以应对短暂突发流量:令牌桶中可以预先生成并积累一定数量的令牌,从而可以应对短暂的突发请求

缺点

  • 对突发流量的适应性有限:令牌桶算法通过预先生成令牌来适应流量的突发情况,但是对于持续高强度的突发流量,令牌桶可能无法及时补充令牌,导致请求被拒绝。
  • 实现较为复杂

如果有帮助的话,可以点个赞支持一下嘛🙏

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值