漏桶算法
漏桶算法的基本思想是:利用一个缓冲区,当有请求进入系统时,无论请求的速率如何,都先在缓存区内保存,然后以固定的流速流出缓冲区进行处理。
它的主要目的是控制数据进入系统的速率,平滑应对系统的突发流量,为系统提供一个稳定的请求流量。
令牌桶算法
令牌桶算法是一种反向的漏桶算法。在令牌桶算法中,桶中存放的不再是请求,而是令牌。处理程序只有拿到令牌后,才能对请求进行处理。如果没有令牌,那么处理程序要么丢弃请求,要么等待可用的令牌。为了限制流速,该算法在单个时间单位产生一定量的令牌存入桶中。
google提供的Guava核心库中的RateLimiter类就是基于令牌桶实现的流控。
令牌桶算法是通过控制令牌生成的速度进行限流,漏桶算法是控制请求从桶中流出的速度进行限流。
简单理解为:令牌桶控制进,漏桶控制出。
但是令牌桶算法可以应对突发的流量,而漏桶算法不行。