限流算法

限流详解

限流算法

令牌桶算法

  • 描述:存放固定容量令牌的桶,按照固定速率往桶里添加令牌
  • 假设限制2r/s,则按照500毫秒的固定速率往桶中=添加令牌
  • 桶中最多存放b个令牌,桶满时,新加的令牌会被丢弃或拒绝

漏桶算法

  • 固定容量的漏桶,按照常量固定速率流出水滴
  • 如果桶是空的不需要流出水滴
  • 可以以任意的速率流入水底要漏桶
  • 如果流入的水滴超出了桶的容量,则流入的水滴溢出(被丢弃),而漏桶的容量是不变的

令牌桶是按照固定速率往桶中添加令牌,请求是否处理需要看桶中的令牌数是否足够,当令牌数减少为0时,则拒绝新的请求


漏桶按照固定速率流出请求,流入请求速率任意,当流入的请求数累计到漏桶容量时,则新流入的请求被拒绝。


漏桶限制的是常量流出速率,流出的速率是一个固定值,从而可一平滑 突发流入速率


令牌桶允许一定程度的突发,而漏桶主要是平滑流入速度,对于相同的参数的到的限流效果是一样的


应用级限流

  • 限制总并发数/连接数/请求数
  • 限制总资源数:(数据库连接数,线程数,使用池化)
  • 限制接口的总并发数(TPS)/请求数(QPS)
  • 限制接口的时间窗口请求数
  • 平滑限制接口的请求数

分布式限流

  • nginx+lua
  • redis+lua
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×