0
点赞
收藏
分享

微信扫一扫

常见限流算法总结

烟中雯城 2022-03-11 阅读 95

在这里插入图片描述

文章目录

概述

限流算法常见的包括:

  • 计数器算法,又包括窗口计数器算法、滑动窗口计数器算法
  • 令牌桶算法(Token Bucket)
  • 漏桶算法(Leaky Bucket)

固定窗口计数器算法

固定窗口计数器算法概念如下:

  • 将时间划分为多个窗口,窗口时间跨度称为Interval,本例中为1000ms;
  • 每个窗口维护一个计数器,每有一次请求就将计数器加一,限流就是设置计数器阈值,本例为3
  • 如果计数器超过了限流阈值,则超出阈值的请求都被丢弃。

在这里插入图片描述

滑动窗口计数器算法

滑动窗口计数器算法会将一个窗口划分为n个更小的区间,例如

  • 窗口时间跨度Interval为1秒;区间数量 n = 2 ,则每个小区间时间跨度为500ms
  • 限流阈值依然为3,时间窗口(1秒)内请求超过阈值时,超出的请求被限流
  • 窗口会根据当前请求所在时间(currentTime)移动,窗口范围是从(currentTime-Interval)之后的第一个时区开始,到currentTime所在时区结束。

在这里插入图片描述

令牌桶算法

令牌桶算法说明:

  • 以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
  • 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
  • 如果令牌桶中没有令牌,则请求等待或丢弃

在这里插入图片描述

漏桶算法

漏桶算法说明:

  • 将每个请求视作"水滴"放入"漏桶"进行存储;
  • "漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;
  • 如果"漏桶"满了则多余的"水滴"会被直接丢弃。
  • 可以理解成请求在桶内排队等待

在这里插入图片描述

限流算法对比

在这里插入图片描述

Sentinel的限流与Gateway的限流有什么差别?

  • Gateway则采用了基于Redis实现的令牌桶算法。
    而Sentinel内部却比较复杂:
  • 默认限流模式是基于滑动时间窗口算法
  • 排队等待的限流模式则基于漏桶算法
  • 而热点参数限流则是基于令牌桶算法
举报

相关推荐

0 条评论