限流的四种算法

本文介绍了限流在计算机网络中的重要性,包括固定窗口限流(简单但可能引发流量突刺)、滑动窗口限流(解决突刺问题但实现复杂)、漏桶限流(固定速率处理但无法快速响应)和令牌桶限流(并发处理但需考虑时间单位)。作者建议根据业务场景选择合适的限流算法。
摘要由CSDN通过智能技术生成

限流的含义:

在计算机网络中,限流就是控制网络接口发送或接收请求的速率,它可防止DoS攻击和限制Web爬虫。

限流,也称流量控制。是指系统在面临高并发,或者大流量请求的情况下,限制新的请求对系统的访问,从而保证系统的稳定性。限流会导致部分用户请求处理不及时或者被拒,这就影响了用户体验。所以一般需要在系统稳定和用户体验之间平衡一下。

1)固定窗口限流

  • 单位时间只允许部分操作

  • 例子:1小时只允许10个用户操作

优点:最简单

缺点:可能出现流量突刺

比如:前 59 分钟没有 1 个操作,第 59 分钟来了 10 个操作;第 1 小时 01 分钟又来了 10 个操作。相当于 2 分钟内执行了 20 个操作,服务器有高峰危险。

2)滑动窗口限流

单位时间只允许部分操作,但是这个单位时间是滑动的,需要指定一个滑动单位

比如滑动单位 1min: 开始前: 0s 1h 2h 一分钟后: 1min 1h1min

优点:能够解决上述流量突刺的问题,因为第59分钟时,限流窗口是 59min-1h59min,这段时间内能够接受10次请求,只要还在这个窗口内,更多的操作就会被拒绝。

缺点:实现相对复杂;限流效果和你的滑动单位有关,滑动单位越小,限流效果越好,但往往很难选取一个特别合适的滑动单位。

3)漏桶限流

固定的速率处理请求(漏水),当请求桶满了后,拒绝请求。

把限制请求的容器想象成一个桶,每次有请求就往桶里面放一滴水(一个请求),这个桶是漏的,每隔固定单位它只会滴下来一滴水(一个请求),当桶的容量满了之后,就拒绝请求。

例如:我让他每秒处理10 哥请求,桶的容量是 10 ,每0.1s固定处理一个请求,如果1s内来了10个请求,都能处理完,但如果来了11个请求,最后那个请求就回溢出桶,被拒绝。

优点:能够一定程度上应对流量突刺,能够固定速率处理请求,保证服务器的安全

缺点:没有办法迅速处理一批请求,只能按顺序一个个来处理(固定速率的缺点)

4)令牌桶限流

解决了漏桶的缺点

管理员先 生成一批令牌,每秒生成 10 个令牌;当用户要操作前,先去拿到一个令牌,有令牌的人就有资格、能同时执行操作。拿不到令牌就等着

优点:能够并发的处理同时的请求,并发性能会更好

缺点(需要考虑的问题):存在时间单位选取的问题

(时间单位选短了,依旧拿不到令牌,选长了,就可能存在令牌在很早之前就被抢完的情况,但这个本身就是限流需要考虑的问题)

在实际运用时 ,3和4用的多一点

这两种算法怎么选取呢? 取决于你的业务场景

  • 如果希望服务器以恒定的速率处理请求 , 就用漏桶限流

  • 如果服务器允许并发操作,希望性能高一点,就用令牌桶限流

如果还有不理解的地方, 建议阅读文章:面试必备:4种经典限流算法讲解 - 掘金

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乌漆嘛黑黑不黑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值