Guava-RateLimiter实现令牌桶控制接口限流方案

Posted xhq1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Guava-RateLimiter实现令牌桶控制接口限流方案相关的知识,希望对你有一定的参考价值。

一.前言

  限流的目的是通过对并发/一个时间窗口内的请求进行限速来达到保护系统的效果,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。

二.常见限流方案

  原理 优点 缺点

计数器法

在单位时间段内,对请求数进行计数,如果数量超过了单位时间的限制,则执行限流策略,当单位时间结束后,计数器清零,这个过程周而复始,就是计数器法。 null 不能均衡限流,在一个单位时间的末尾和下一个单位时间的开始,很可能会有两个访问的峰值,导致系统崩溃。

 

  漏桶算法                                                              

假设有一个水桶,水桶有一定的容量,所有请求不论速度都会注入到水桶中,然后水桶以一个恒定的速度向外将请求放出,当水桶满了的时候,新的请求被丢弃。 可以平滑请求,削减峰值。 瓶颈在漏出的速度,可能会拖慢整个系统,且不能有效地利用系统的资源。

令牌桶算法

(推荐)

有一个令牌桶,单位时间内令牌会以恒定的数量和速度加入到令牌桶中,所有请求都需要获取令牌才可正常访问。当令牌桶中没有令牌可取的时候,则拒绝请求。 相比漏桶算法,令牌桶算法允许一定的突发流量,但是又不会让突发流量超过我们给定的限制(单位时间窗口内的令牌数)。即限制了我们所说的 QPS(每秒查询率)。 null

 

 

以上是关于Guava-RateLimiter实现令牌桶控制接口限流方案的主要内容,如果未能解决你的问题,请参考以下文章

使用golang实现令牌桶限流和时间窗口控制

限流算法之漏桶、令牌桶的区别

Token bucket

Java多线程并发编程/锁的理解

服务熔断流量控制算法(漏桶令牌桶)

nginx浅析4-限流(秒杀,高并发)