0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么需要限流?常见的限流算法有哪些

jf_uPRfTJDa 来源:5G通信 2023-08-18 11:35 次阅读

随着系统服务的不断扩展,越来越多的用户访问让我们的系统“不堪重负”,为了防止某些用户恶意高频的访问接口信息,限流(流量限速 Rate Limit)应运而生,这时候选择一个合适的限流算法也就尤为重要。

作者:程造洋

单位:中国移动智慧家庭运营中心智慧互联产品

Part 01为什么需要限流呢?

大量正常用户高频访问导致服务器宕机

用户恶意高频访问导致服务宕机

网页爬虫

对于这些情况我们需要对用户的访问进行限流访问,限流的目的是保护服务节点或集群底层的存储资源,防止调用方过度使用服务,引起系统崩溃,或者某个调用方过度的使用某个服务,导致其他服务的不可用,为了维持系统的稳定性和可用性,限流刻不容缓。

Part 02常见的限流算法介绍

2.1 计数器限流

计数器法是限流算法里最简单也是最容易实现的一种算法,具体规则为:在指定周期内累加访问次数,当访问的次数达到我们设定的阈值时,触发限流策略,当进入下一个时间周期时会将访问次数重新清零。

优点:实现简单;

缺点:突刺现象,如果设置每分钟的并发限制数量为100,在单位时间1分钟内的前1s,通过了100个请求,则后面的59s都无法接受任何请求,也就无法应对短时间高并发,存在一定的局限性。

举例:假设有一个恶意用户,他在0:59时,瞬间发送了100个请求,并且1:00又瞬间发送了100个请求,那么其实这个用户在 1秒里面,瞬间发送了200个请求。

c9386af8-3ce1-11ee-ac96-dac502259ad0.png

我们刚才规定的是1分钟最多100个请求(规划的吞吐量),也就是每秒钟最多1.7个请求,用户通过在时间窗口的重置节点处突发请求, 可以瞬间突破我们的限流限制。用户有可能通过算法的这个漏洞,瞬间压垮我们的应用。

2.2 滑动窗口限流

在了解滑动窗口之前我们需要先了解一下固定窗口,规定:我们单位时间处理的请求数量比如我们规定我们的一个接口一分钟只能访问10次的话。使用固定窗口计数器算法的话可以这样实现:给定一个变量counter来记录处理的请求数量,当1分钟之内处理一个请求之后counter+1,1分钟之内的如果counter=100的话,后续的请求就会被全部拒绝。等到 1分钟结束后,将counter回归成0,重新开始计数。

滑动窗口算是固定窗口计数器算法的升级版。滑动窗口计数器算法相比于固定窗口计数器算法的优化在于:它把时间以一定比例分片。例如我们的借口限流每分钟处理100个请求,我们可以把1 分钟分为100个窗口。每隔1秒移动一次,每个窗口一秒只能处理 不大于100(请求数)/60(窗口数) 的请求, 如果当前窗口的请求计数总和超过了限制的数量的话就不再处理其他请求。滑动方式如下图所示:

c9550c12-3ce1-11ee-ac96-dac502259ad0.png

很显然,当滑动窗口的格子划分的越多,滑动窗口的滚动就越平滑,限流的统计就会越精确。

2.3 漏桶算法限流

漏桶算法思路很简单:水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大,会在超过桶可接纳的容量时直接溢出。漏桶算法其实很简单,可以粗略的认为就是注水漏水过程,往桶中以任意速率流入水,以一定速率流出水,当水超过桶容量(capacity)则丢弃,因为桶容量是不变的,保证了整体的速率。

优点:削峰,有大量流量进入时,会发生溢出,从而限流保护服务可用;缓冲,不至于直接请求到服务器,缓冲压力;

缺点:漏桶不能有效应对突发流量,但是能起到平滑突发流量(整流)的作用,同时不支持动态扩容。

2.4 令牌桶算法限流

令牌桶算法以一个设定的速率产生令牌并放入令牌桶中,每次请求都得申请令牌,如果令牌数量不足,则拒绝请求。令牌桶算法中新请求到来时会从桶里拿走一个令牌,如果桶内没有令牌可拿,就拒绝服务。当然,令牌的数量也是有上限的。令牌的数量与时间和发放速率强相关,时间流逝的时间越长,会不断往桶里加入越多的令牌,如果令牌发放的速度比申请速度快,令牌桶会放满令牌,直到令牌占满整个令牌桶,如下图所示。

c973d804-3ce1-11ee-ac96-dac502259ad0.png

令牌桶限流大致的规则如下:

1)进水口按照某个速度,向桶中放入令牌。

2)令牌的容量是固定的,但是放行的速度不是固定的,只要桶中还有剩余令牌,一旦请求过来就能申请成功,然后放行。

3)如果令牌的发放速度,慢于请求到来速度,桶内就无牌可领,请求就会被拒绝。

优点:可以改变令牌的发放速度,方便应对突发出口流量,是选择较多的限流算法;

缺点:实现复杂,相对于其他限流算法,令牌桶算法的实现较为复杂,对短时请求难以处理,这种情况下,可以考虑使用漏桶算法。

Part 03常见的限流器,算法库包以及实现方案

滴滴的 tollbooth

Guava RateLimiter限流

轻量级流量控制组件sentinel

redis+lua分布式限流组件

redission分布式限流采用令牌桶思想和固定时间窗口

spring cloud gateway集成redis限流,但属于网关层限流

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4456

    浏览量

    90757
  • 计数器
    +关注

    关注

    32

    文章

    2123

    浏览量

    92985

原文标题:聊一聊系统限流算法

文章出处:【微信号:5G通信,微信公众号:5G通信】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    变阻器的分压与限流电路

    变阻器的分压与限流电路 利用变阻器通过分压限流电路可以达到控制电路中电压和电流的变化 . 通常分压与限流电路中的变阻器为滑线式
    发表于 11-24 15:18 7428次阅读
    变阻器的分压与<b class='flag-5'>限流</b>电路

    标准限流电路

    标准限流电路 图 标准限流电路 在简单串联稳
    发表于 07-20 15:50 9875次阅读
    标准<b class='flag-5'>限流</b>电路

    一种饱和铁心桥式故障限流

    为解决系统短路电流过大、传统饱和铁心型故障限流限流效果和经济性不理想等问题,提出一种饱和铁心桥式故障限流器( BSFCI)。相比传统饱和铁心型故障限流器,该
    发表于 01-29 11:23 0次下载
    一种饱和铁心桥式故障<b class='flag-5'>限流</b>器

    限流电阻发热怎么解决_限流电阻的计算

    本文主要介绍了限流电阻发热怎么解决_限流电阻的计算。限流电阻:串联于电路中,也起分压作用。电阻RL是负载电阻,R为稳压调整电阻(也称为限流电阻),D为稳压管。按稳压电路设计准则,在输入
    发表于 03-28 08:51 2.8w次阅读

    分压法和限流法的区别_分压式与限流式的选择

    本文主要介绍了分压法和限流法的区别_分压式与限流式的选择。分压电路和限流电路的基本分析。滑动变阻器的限流法是串联在电路中的。滑动变阻器的分压法是并联在电路中的。滑动变阻器的分压法的电压
    的头像 发表于 03-28 15:06 11.3w次阅读
    分压法和<b class='flag-5'>限流</b>法的区别_分压式与<b class='flag-5'>限流</b>式的选择

    限流器的作用_限流器的工作原理

    本文首先介绍了限流器的作用和特征,然后分析了限流器的优缺点,最后粗略说明了限流器的工作原理并且从限流方式方面对限流器进行了分类。
    的头像 发表于 08-02 14:56 2.3w次阅读

    一文详解限流算法的实现方式

    不依赖外部库的情况下,限流算法有什么实现的思路?本文介绍了3种实现限流的方式。
    的头像 发表于 05-25 12:00 1209次阅读

    常用限流方式分析 怎么设计出高并发限流方案

    来源:楼仔 常用限流方式 计数器 滑动窗口 漏桶 令牌桶 Redis + Lua 分布式限流 聊聊其它 限流对比 什么是限流呢?限流是限制到
    的头像 发表于 10-09 17:53 1257次阅读

    限流方案常用算法 常用的限流方案

    需要注意的是借助Redis实现的限流方案可用于分布式系统,而guava实现的限流只能应用于单机环境。如果你觉得服务器端限流麻烦,可以在不改任何代码的情况下直接使用容器
    发表于 04-08 10:50 275次阅读

    聊一聊限流限流方案常用算法

    对于分布式环境来说,无非是需要一个类似中心节点的地方存储限流数据。打个比方,如果我希望控制接口的访问速率为每秒100个请求,那么我就需要将当前1s内已经接收到的请求的数量保存在某个地方,并且可以让集群环境中所有节点都能访问。那我
    发表于 05-04 11:16 149次阅读

    分布式限流简介

    限流是生产中经常遇到的一个场景, 目前现有的一个工具大部分是提供单机限流的能力, 例如 google 的 guava 中提供的 RateLimiter. 但是生产环境大部分是分布式环境, 在多台机器的环境下, 需要的是能对多台机
    的头像 发表于 05-16 16:40 722次阅读
    分布式<b class='flag-5'>限流</b>简介

    电阻常见作用:分压、分流和限流

    在电子线路中电阻的作用有哪些,电阻主要起阻碍电流流过的作用,也是电路中使用最多的元器件,不同类型的电阻所起的作用不同,但电阻最常见的作用是分压、分流和限流
    的头像 发表于 09-14 15:38 2441次阅读
    电阻<b class='flag-5'>常见</b>作用:分压、分流和<b class='flag-5'>限流</b>

    如何判断限流断路器能保护到微断?能否从限流曲线判断?

    如何判断限流断路器能保护到微断?能否从限流曲线判断? 限流断路器(也称为过载保护器)是一种电气保护设备,用于保护电气系统免受过流和过载损害。在电气系统中,流经导线和设备的电流必须控制在安全范围内
    的头像 发表于 02-05 15:23 169次阅读

    限流器是啥 常见限流

    限流器通常会根据特定条件对电流进行调整。当电流超过设定的阈值时,限流器将引入额外的电阻或其他形式的阻抗,以限制电流的流动。
    的头像 发表于 02-06 13:51 1350次阅读

    分布式神器-限流器的四种限流方法

    常见限流算法包括计数器、固定窗口、滑动窗口、漏桶和令牌桶等。其中,计数器是最简单的限流算法,它通过统计请求的数量来进行
    的头像 发表于 02-06 14:17 379次阅读
    分布式神器-<b class='flag-5'>限流</b>器的四种<b class='flag-5'>限流</b>方法