常见的限流算法及其实现方式

在高并发的分布式系统,如大型电商系统中,由于接口 API 无法控制上游调用方的行为,因此当瞬间请求量突增时,会导致服务器占用过多资源,发生响应速度降低、超时乃至宕机,甚至引发雪崩造成整个系统不可用。

面对这种情况,一方面我们会提升 API 的吞吐量和 QPS(Query Per Second 每秒查询量),但总归会有上限,所以另一方面为了应对巨大流量的瞬间提交,我们需要做对应的限流处理,也就是对请求量进行限制,对于超出限制部分的请求作出快速拒绝、快速失败、丢弃处理,以保证本服务以及下游资源系统的稳定。

常见的限流算法有计数器、漏斗、令牌桶。

一、计数器

1. 设计思路#

图片

计数器限流方式比较粗暴,一次访问就增加一次计数,在系统内设置每 N 秒的访问量,超过访问量的访问直接丢弃,从而实现限流访问。具体大概是以下步骤:

  1. 将时间划分为固定的窗口大小,例如 1 s;

  2. 在窗口时间段内,每来一个请求,对计数器加 1;

  3. 当计数器达到设定限制后,该窗口时间内的后续请求都将被丢弃;

  4. 该窗口时间结束后,计数器清零,从新开始计数。

这种算法的弊端是,在开始的时间,访问量被使用完后,1 s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值