漏桶限流算法和令牌桶限流算法是什么?

漏桶限流算法

维持一个漏斗,有恒定的流出速度,不管水流的速度有多大,漏斗出水的速度总是恒定不变的

漏桶容量可以通过漏桶的流出速度*可接受的等待时长来计算。在这个容量范围内的请求可以排队等待系统处理,超过这个容量的请求将会被抛弃

情况分析:

1、当请求的速度大于漏桶的流出速度,也就是说请求量大于服务器所能承受的最大值,将会被限流,超出桶流量的请求将会被抛弃

2、当请求的速度小于或者等于漏桶的流出速度,也就是说请求量仍在服务器所能承受的范围内,请求能够正常被处理,并且不会产生请求抛弃现象

不足:无法处理突发大流量的情况

令牌桶算法

令牌桶算法,是增加一个大小固定的容器,也就是令牌桶,系统以恒定的速率向令牌桶中放入令牌

如果有客户端来请求,先需要从令牌桶中拿一个令牌,拿到令牌,才有资格访问系统,被拿到的令牌将会从桶中移除。

当令牌桶满的时候,再向令牌桶生成令牌的时候,令牌就会被抛弃

情况分析:

1、请求速度大于令牌的生成速度,那么令牌桶中的令牌会被取完,后续再进来的请求,由于拿不到令牌,会被限制

2、请求速度等于令牌的生成速度,此时系统处于平稳状态,基本上就是令牌刚生成一个,请求就使用一个

3、请求速度小于令牌的生成速度,此时会堆积令牌,桶满后之后的令牌将被抛弃,请求正常处理;当有大容量的请求过来后,短时间内会快速消耗桶中的令牌,直到令牌桶中没有令牌后,将会被限流

令牌桶与漏桶算法的区别是,令牌桶算法支持处理短时间大流量的场景

你可能感兴趣的:(java)