限流之令牌桶算法实现

令牌桶算法示意

和漏桶算法算法类似,令牌桶算法的核心是固定“进口”速率,可以应对突发流量,是非常非常常用的算法。

  • 桶里装的是令牌
  • 在被处理之前需要拿到一个令牌,请求处理完毕之后将这个令牌丢弃(删除)
  • 拿不到令牌就被「流量干预」
  • 根据限流大小,按照一定的速率往桶里添加令牌

通常在实现中,令牌的增加都是基于时间的延迟计算和预消费的思想。

阅读更多

限流之漏桶算法实现

漏桶算法把发请求的动作比作成注水到桶中,处理请求的过程可以比喻为漏桶漏水。

往桶中以任意速率流入水,以一定速率流出水,当水超过桶流量则丢弃,因为桶容量是不变的,保证了整体的速率。

阅读更多
限流之滑动窗口计数器实现

限流之滑动窗口计数器实现

滑动窗口其实就是对固定窗口做了进一步的细分,将原先的粒度切的更细,相当于固定窗口计数器算法的升级版。

如果固定窗口的「固定周期」已经很小了,那么使用滑动窗口的意义也就没有了。

本文整理了滑动窗口计数器的伪代码、Redis、Go 的实现方法。

阅读更多

限流之固定窗口计数器实现

固定窗口计数器规定单位时间处理的请求数量。该算法无法保证限流速率,因而无法保证突然激增的流量。优点是容易理解,实现简单。

本文整理了固定窗口计数器的伪代码、Redis、Go 和 Java 的实现方法和思路。

阅读更多