限流算法

令牌桶算法

令牌桶算法算法思想是:

  • 令牌以固定速率产生,并缓存到令牌桶中;
  • 令牌桶放满时,多余的令牌被丢弃;
  • 请求要消耗等比例的令牌才能被处理;
  • 令牌不够时,请求被缓存。
    限流算法

漏桶算法

算法思想是:

  1. 水(请求)从上方倒入水桶,从水桶下方流出(被处理);
  2. 来不及流出的水存在水桶中(缓冲),以固定速率流出;
  3. 水桶满后水溢出(丢弃)。
  4. 这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。

区别

漏桶漏桶的出水速度是恒定的,那么意味着如果瞬时大流量的话,将有大部分请求被丢弃掉(也就是所谓的溢出)。
令牌桶生成令牌的速度是恒定的,而请求去拿令牌是没有速度限制的。这意味,面对瞬时大流量,该算法可以在短时间内请求拿到大量令牌,而且拿令牌的过程并不是消耗很大的事情。