一 点睛
发生过载的原因主要是缓冲区满,导致处理的请求超时。所以限制流量,尽早拒绝过载状态的请求,能够保证服务尽量处理负载过程中的请求。
限流的主要方法有下面四种:
-
计数器算法
-
滑动窗口算法
-
漏桶算法
-
令牌桶算法
本篇介绍计数器算法。
二 算法
计数器算法是在一定的时间间隔里,记录请求次数,当请求次数超过该时间限制时,就把计数器清零,然后重新计算。当请求次数超过间隔内的最大次数时,拒绝访问。
例如:一个接口每分钟允许访问100次。实现方式如下:
1 设置一个计数器 count ,接收一个请求就将计数器加一,同时记录当前时间。
2 判断当前时间和上次统计时间是否为同一分钟。
如果是,则判断 count 是否超过阈值,如果超过阈值,则返回限流拒绝。
如果不是,则吧 count 重置为1,判断是否超过阈值。
如下图所示,该计数器算法要求每分钟请求的阈值不超过100个。
三 代码
package currentLimit;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
/**
* @className: Co