白话简述常见的4种限流算法

什么是限流?
限流是保护系统的一种手段,可以控制系统的流量输入或输出的速度,即限制系统一定时间内的流量数量,限制输入流量较为常见。

为什么需要限流?
因为每个系统一定时间内的流量处理能力都是有限的,当流量超出系统的处理能力的时候,系统就会出现问题,甚至崩溃。所以,我们需要把有超流量风险的系统或接口进行限速。

限流的应用场景有哪些?
1、瞬时业务流量(双11、秒杀)
2、恶意流量(DNS攻击,伪造大量请求对服务器进行攻击)
3、业务需要(例如阿里云、腾讯云等厂家提供的流量限速服务)

常见的4种限流算法

计数器算法
把时间端固定切割成若干模块,然后限制每个时间段内的数量,达到限流。例如,当一个系统的每1分钟处理请求的能力为100的时候,把时间段以每1分钟为一个时间段,然后每增加一个请求则统计请求数+1,当现1分钟的请求数达到100的时候,则不再接受新的请求。然后下一个1分钟开始的时候对重置统计请求数。但是这种算法基本被淘汰了,已经很少由公司使用这种算法,因为容易出现矛尖等情况(举例:当处于1分59秒的时候,并发了100流量,然后2分整的时候重置统计数,2分01又并发了100请求,这样就会出现3秒内出现200个请求的情况,而系统的安全极限是100,这样就会出现性能安全等问题)。

滑动区间算法
滑动区间算法是对计数器算法的一种升级,于计数器最大的差别就是,时间段并不像计数器算法那样固定时间段,而是滑动时间段。例如,当一个系统的每1分钟处理请求的能力为100的时候,每有1个请求的时候,统计之于当前时间的过去1分钟内的请求数,若果这个统计数达到100的时候,则拒绝新的请求。这种情况避免了计数器的矛尖风险,但是每次要统计过去的时间段内的请求数,对系统的性能负担比较大,慎用。

漏桶算法
漏桶算法是现在比较流行的限流算法之一。
顾名思义,假设流量是水管灌注的流水,而我们的限流器是水桶,流水的速度是不固定,有时候很少很慢并发低,有时候很大速度很猛并发高。而漏桶算法最大的特点就是不限制串入的流量,但是限制消费的流量,可基于消息队列进行实现。(白话举例,流水灌注水桶,水桶底部打洞作漏斗使用,限制底部的出水速度,而系统只需处理底部的流出流量)对于溢出水桶流量(限制数)则进行拒绝或不处理。

令牌桶算法
令牌桶算法也是现在比较流行的限流算法之一。
令牌桶算法是系统以稳定的速度向令牌桶发放令牌,每个打向系统的请求,都需要先取得令牌,系统只接受带有令牌的请求。没有抢到令牌的请求则进行拒绝处理,保证系统的流量输入速度在我们系统处理能力范围内。可使用谷歌的Guava包进行实现。

分享完毕,有时间再补图吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

迪八戈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值