限流算法小结

1.令牌桶

优点:能限制请求频率,也能够应对突发流量
参数
  • 最少令牌
  • 最大令牌
  • 添加令牌的速度
  • 上次添加令牌的毫秒数
过程
  • 系统会按恒定1/QPS时间间隔(如果QPS=100,则间隔是10ms)往桶里加入Token,如果桶已经满了就不再加了。新请求来临时,会各自拿走一个Token,如果没有Token可拿了就阻塞或者拒绝服务。

2.漏桶法

优点:能限制请求频率,适合请求速度匀速限流
缺点:不支持突发流量
过程
  • 水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求可以看出漏桶算法能强行限制数据的传输速率。

3.计数法(固定时间窗口限流算法):

  • 选定一个时间的起点,之后每当有接口请求到来,我们就将计数器加1,如果在当前时间窗口内,根据限流规则(每秒钟允许100次访问请求),出现累加访问次数超过限流值情况,我们请拒绝后续访问请求。当进入下一个时间窗口后,计数器就清零重新计数。

  • 缺点:限流策略过于粗略,无法应对两个时间窗口临界时间内的突发流量

4.滑动时间窗口限流算法:

  • 在任意1s的时间窗口内,接口的请求次数都不能大于K次。

  • 维护一个K+1的循环队列,用来记录1s内到来的请求,【当队列满时,tail指向的位置实际上是没有存储数据的,所以循环队列会浪费一个数组的存储空间】

  • 当有新的请求到来时,我们将与这个新请求的时间间隔超过1s的请求,从队列中删除。然后我们再来看循环队列中是否有空闲位置。如果有,则把新请求存储在队列尾部,如果没有,则说明1s内的请求次数已经超过了限流值K,所以这个请求被拒绝服务。

  • 缺点:只能在选定时间粒度上限流,对选定时间粒度内的更加细粒度的访问频率不做限制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章