乐趣区

漏桶算法与令牌桶算法限流

一、漏桶算法

1、原理

漏桶算法的原理可以这么理解,就是有一个容量有限的桶,每个请求想象成滴入桶中的一滴水,但是这个桶中的水是以恒定的速率从桶的底部流出,假如说每秒钟只流出一滴水,但是每秒钟滴入 10 滴水,所以当请求过多,超过桶容量的限制时,则直接溢出,抛弃请求

2. 代码实现思路

1)代码实现可以这么理解,有一个固定容量的 ArrayBlockingQueue, 每次请求过来时,也就是向这个桶中,放入当前线程,当 ArrayBlockingQueue 满的时候,则直接拒绝再向 queue 中放入请求,另外有一个循环以固定的速率从 queue 中读取数据,当读取到的线程与当前线程相等时,这时会释放该请求,令其继续执行,否则直到等到当前线程从桶中移出时,这种方式有可能会导致后面进入的请求,等待很长时间

2)对于等待时间过长问题,可以预估当前线程需要等待多长时间,如果等待时间超过出入的超时时间,直接 reutrn false,否则继续等待,直到从桶中取出当前线程,接着 return true

退出移动版