限流之计数器算法

本文介绍了计数器算法作为限流策略的基本原理和实现,通过在一个时间间隔内记录请求次数来限制接口访问频率。当请求次数超过设定阈值时,系统将拒绝新的请求。然而,这种算法存在缺陷,可能导致在时间间隔边界附近的短时间内处理过多请求,从而引起后端过载。文章还提供了Java代码示例来演示计数器算法的使用,并通过测试结果展示了其可能的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 点睛

发生过载的原因主要是缓冲区满,导致处理的请求超时。所以限制流量,尽早拒绝过载状态的请求,能够保证服务尽量处理负载过程中的请求。

限流的主要方法有下面四种:

  • 计数器算法

  • 滑动窗口算法

  • 漏桶算法

  • 令牌桶算法

本篇介绍计数器算法。

二 算法

计数器算法是在一定的时间间隔里,记录请求次数,当请求次数超过该时间限制时,就把计数器清零,然后重新计算。当请求次数超过间隔内的最大次数时,拒绝访问。

例如:一个接口每分钟允许访问100次。实现方式如下:

1 设置一个计数器 count ,接收一个请求就将计数器加一,同时记录当前时间。

2 判断当前时间和上次统计时间是否为同一分钟。

如果是,则判断 count 是否超过阈值,如果超过阈值,则返回限流拒绝。

如果不是,则吧 count 重置为1,判断是否超过阈值。

如下图所示,该计数器算法要求每分钟请求的阈值不超过100个。

三 代码

package currentLimit;

import java.util.Calendar;
import java.util.Date;
import java.util.Random;

/**
* @className: Co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值