一图速记:

算法/结构类型主要作用应用场景示例
令牌桶算法限流算法控制请求速率接口限流,突发请求处理
漏桶算法限流算法控制流出速率接口平滑输出,缓解突发压力
布隆过滤器数据结构判断元素是否存在缓存穿透防护、黑名单检查

1. 令牌桶算法(Token Bucket)

原理:

  • 系统以固定速率往桶中放令牌
  • 每个请求要消费一个令牌;
  • 没有令牌就拒绝/排队;
  • 支持突发请求(桶有余量时)。

特点:

  • 平均速率控制;
  • 可处理突发流量(桶内有余量);
  • 更灵活。

应用场景:

  • 接口限流(高并发情况下也允许一定突发);
  • API网关、网速控制等。

2. 漏桶算法(Leaky Bucket)

原理:

  • 请求先进入桶中;
  • 桶以固定速率漏水(处理请求);
  • 桶满时,多余请求被丢弃/排队;
  • 不支持突发请求(超过容量就丢弃)。

特点:

  • 输出速率恒定;
  • 平滑处理请求;
  • 避免系统被突发请求打垮。

应用场景:

  • 日志限流、消息队列流控;
  • 上传带宽控制。

3. 布隆过滤器(Bloom Filter)

原理:

  • 一种空间效率极高概率型数据结构
  • 使用多个哈希函数,将元素映射到位数组;
  • 判断某元素是否存在时:

    • 若对应位全为1:可能存在(但有误判);
    • 有任何一位为0:一定不存在。

特点:

  • 极高效率和节省内存
  • 有一定误判率(可调),但不会漏判
  • 不能删除元素(除非用Counting Bloom Filter)。

应用场景:

  • 防止缓存穿透(如Redis前);
  • 黑名单过滤;
  • 数据去重。

总结对比

特性令牌桶漏桶布隆过滤器
类型限流算法限流算法概率型数据结构
控制速率方式控制放行速率(加令牌)控制处理速率(出水)判断数据是否存在
是否支持突发✅ 是❌ 否不适用
是否有误判❌ 无❌ 无✅ 有(可能误判存在)
使用场景限流、防攻击平滑处理请求缓存穿透、黑名单过滤


Leojx
935 声望30 粉丝

没有个人简介