sentinel限流算法

发布于:2025-03-19 ⋅ 阅读:(11) ⋅ 点赞:(0)

限流算法:固定窗口算法、滑动时间窗口、令牌桶和漏桶这四种常见限流算法的原理:

限流算法原理

  1. 固定窗口

    • 固定窗口算法将时间划分为固定大小的窗口,并在每个窗口内限制请求的数量。在每个窗口开始时,计数器重置,如果在当前窗口内请求数超过限制,则拒绝新的请求。
    • 优点:简单易实现。
    • 缺点:但对于时间精度要求较高的场景可能不够精确。
  2. 滑动时间窗口

    • 在固定窗口的基础上,滑动窗口计数器算法会将一个窗口划分为n个更小的区间:(在窗口的基础上引入区间的概念)
    • 优点:实现简单,易于理解。比固定窗口更加精准。
    • 缺点:无法保证整体流量曲线的平滑。
  3. 令牌桶

    • 有一个固定大小的桶,桶中会按照一定的速率生成令牌。
    • 每个请求都需要消耗一个令牌才能通过,如果桶中没有足够的令牌,则请求会被拒绝。可以设置桶中令牌的上限来限制超时令牌累加问题。
    • 优点:可以应对流量的突增,实现灵活的限流策略。
    • 缺点:实现相对复杂,需要维护令牌的生成和消耗。
  4. 漏桶

    • 有一个固定大小的桶,请求可以进入桶中,然后按照固定的速率被处理。
    • 漏桶可以保证流量的平滑输出,因为所有请求都会按照固定速率被处理,无论请求的到达速率如何。
    • 优点:保证流量的平滑输出,实现严格的限流。
    • 缺点:无法应对流量的突增,可能会导致请求的延迟。

总结

对比项 固定窗口算法 滑动时间窗口 令牌桶 漏桶
能否保证流量曲线平滑 不能,存在临界点问题,可能导致流量突增 能,窗口内区间越小,流量控制越平滑 基本能,在请求量持续高于令牌生成速度时,流量平滑 能,所有请求进入桶内,以恒定速率放行,绝对平滑
能否应对突增流量 不能,突增流量只要高出限流阈值都会被拒绝 不能,徒增流量,只要高出限流阈值都会被拒绝 能,桶内积累的令牌可以应对突增流量 能,请求可以暂存在桶内
流量控制精确度 低,窗口区间越大,精度越低 低,窗口区间越小,精度越高
适用场景 适用于对时间精度要求不高的简单API限流 适用于大多数场景 适用于需要灵活限流策略的场景 适用于需要严格平滑流量输出的场景

这个表格总结了限流算法在保证流量曲线平滑、应对突增流量和流量控制精确度方面的特点,以及它们各自的适用场景。每种算法都有其优势和局限性,选择哪种算法取决于具体的业务需求和场景。

Sentinel 与 Gateway 限流算法区别

  1. Gateway

    • 主要采用基于 Redis 实现的令牌桶算法
    • 令牌桶算法能够应对流量的突增,因为它允许在短时间内消耗桶中积累的令牌。
  2. Sentinel

    • 提供了更复杂的限流策略,包括:
      • 默认限流模式:基于滑动时间窗口算法,适用于大多数场景,可以保证在窗口内流量的平滑,但无法保证整体流量曲线的平滑。
      • 排队等待的限流模式:基于漏桶算法,可以保证流量以固定速率被处理,适用于需要严格平滑流量输出的场景。
      • 热点参数限流:基于令牌桶算法,适用于对特定热点参数进行限流的场景,可以应对突增流量。

网站公告

今日签到

点亮在社区的每一天
去签到