qps流量控制-令牌桶算法

一般并发系统有对应处理请求的最大能力,这里称最大qps,也需要有阈值设置,如果超过最大qps,则可能导致系统不稳定,产生雪崩效应,甚至连锁反应。

限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:部分拒绝处理。

 

令牌桶算法

  令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。 当桶满时,新添加的令牌被丢弃。

令牌桶是一个存放固定容量令牌(token)的桶,按照固定速率往桶里添加令牌。令牌桶算法基本可以用下面的几个概念来描述:

  • 令牌将按照固定的速率被放入令牌桶中。比如每秒放10个。
  • 桶中最多存放b个令牌,当桶满时,新添加的令牌被丢弃。
  • 当1个请求到达,如果桶中还有令牌,将从桶中删除1个令牌,接着请求会被处理。
  • 如果桶中的令牌不足1个,则不会给该请求分发令牌,该请求会被直接返回,日志记录该请求超阈值。

qps流量控制-令牌桶算法

令牌桶c++实现:https://github.com/phlamenco/boully.git

代码转自:https://www.jianshu.com/p/6f9e24f4394a