一 算法描述
漏桶算法比较形象,设想有一个桶,桶的底部有一个洞,当装上水的时候,水会一滴一滴地从底部漏掉。当装的水太满,水会溢出,但底部漏水的速度还是不变的。
底部漏水的速度就是系统处理的速度,桶里存储的水就是上游过来的请求。当请求太多,超过桶的容量,就会被拒绝。系统只在另一端按照固有的速度处理请求。
如下图所示,外部的请求随机而来,把“桶”填满后,装不进“桶”的请求被丢弃。每秒从“桶”中匀速“漏出”一定量的“水”(请求),服务进程处理漏出的请求包。
当请求突增的时候,漏桶算法能够保证处理速度总是恒定的。
在系统启动时,如果想让系统有一个陆续启动的过程,则不用一下子接受太多请求,让系统处理请求量平缓上升到最大处理能力。
系统可以在一些时刻处理突增的请求,只要持续时间不是很长,系统有能力处理即可。
二 需求
1 桶的容量是承载2000个请求,处理速度是每毫秒1个请求。即1秒1000个请求。
2 外部最大请求为 1500 个,并随机取值,会限流吗?
三 代码
package currentLimit;
import java.util.Random;
/**
* @className: LeakBucket
* @description: 漏桶算法
* @date: 2022/1/8
*