三个高效的限流算法

本文介绍了三种接口限流算法:计数器算法、漏桶算法和令牌桶算法。计数器算法简单但存在突刺现象;漏桶算法能恒定处理速率,超出则丢弃请求;令牌桶算法则在限制速率的同时允许一定程度的突发调用。通常,漏桶和令牌桶算法结合ScheduledThreadPoolExecutor实现,并可以使用Guava的RateLimiter进行限流操作。
摘要由CSDN通过智能技术生成

介绍

一般做接口限流主要是为了应对突发流量,避免突发流量拖垮服务。如下面一些场景就有可能发生突发流量

  1. 微博热搜
  2. 恶意刷单
  3. 恶意爬虫
  4. 促销活动

接口限流的算法有如下几种

计数器算法

这是最容易理解和实现的算法,假设一个接口1s中最多请求100次。最开始设置一个计数器count=0,来一个请求count+1,1s之内count<=100的请求可以正常访问,count>100的请求则被拒绝,1s之后count被重置为0,重新开始计数

当然这种方式有个弊端,1s内只有最开始的100个请求能正常访问,后面的请求都不能正常访问,即突刺现象。此时我们就可以用滑动窗口算法来解决这个问题,例如把1s分成5个时间段,每个时间段能正常请求20次。

漏桶算法

在这里插入图片描述
漏桶算法参考家里使用的漏斗你就能明白了,往漏斗里面倒水,不论倒多少水,下面出水的速率是恒定的。当漏斗满了,多余的水就被直接丢弃了。

类比流量,每秒处理的速率是恒定的,如果有大量的流量过来就先放到漏斗里面。当漏斗也满了,请求则被丢弃。

实现:用队列保存请求,用ScheduledThreadPoolExecutor(支持定时任务的线程池)来定时从

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值