欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

高并发流量限制 ------- 代币桶算法和泄漏桶算法

最编程 2024-03-07 14:15:19
...

用户在点击下单时,会在后端生成一个令牌(token),并存到redis中,然后又会从redis把对应的令牌读出来,若能成功读取,则能正常下单,若不能,证明生成令牌没成功,若没有令牌,用户是不能够正常下单的。

 

一、令牌桶算法

令牌桶算法的原理是系统以恒定的速率产生令牌,然后把令牌放到令牌桶中,令牌桶有一个容量,当令牌桶满了的时候,再向其中放令牌,那么多余的令牌会被丢弃;当想要处理一个请求的时候,需要从令牌桶中取出一个令牌,如果此时令牌桶中没有令牌,那么则拒绝该请求。

 

二、漏桶算法

把请求比作是水,水来了都先放进桶里,并以限定的速度出水,当水来得过猛而出水不够快时就会导致水直接溢出,即拒绝服务。

三、令牌桶算法VS漏桶算法

漏桶

漏桶的出水(处理请求)速度是恒定的,那么意味着如果瞬时大流量的话,将有大部分请求被丢弃掉(也就是所谓的溢出)。

令牌桶

生成令牌的速度是恒定的,而请求去拿令牌是没有速度限制的。这意味,面对瞬时大流量,该算法可以在短时间内请求拿到大量令牌,而且拿令牌的过程并不是消耗很大的事情。所以令牌桶能够处理突发的大流量。

四、限流工具类RateLimiter

Google开源工具包Guava提供了限流工具类RateLimiter,该类基于令牌桶算法来完成限流,非常易于使用。