---

title: API 限流策略:令牌桶与漏桶的原理与工程取舍

keywords:

  • 令牌桶
  • 漏桶
  • RateLimiter
  • Redis 限流
  • 窗口
  • 拒绝策略

description: 对令牌桶与漏桶算法进行对比,给出突发能力与平滑限流的取舍,结合本地与分布式实现(Guava/Redis/Nginx)提供工程实践建议与参考来源。

tags:

  • RateLimiter
  • Redis 限流
  • 令牌桶
  • 后端
  • 拒绝策略
  • 架构
  • 漏桶
  • 窗口
  • 限流

categories:

  • 文章资讯
  • 技术教程

---

概述

限流保护系统在高并发与突发流量下稳定运行。漏桶提供平滑的固定出水速率;令牌桶允许突发(在上限内),更适合 API 速率控制与用户体验。

算法原理

  • 漏桶:固定速率漏水,溢出丢弃,对突发不友好但稳定[参考1,2,4,5]。
  • 令牌桶:恒定速率生成令牌,桶满溢弃;请求需消耗令牌,支持一定突发,拿不到令牌时阻塞或拒绝[参考1,2,3,4,5]。

工程实现

  • 单机:Guava RateLimiter 提供平滑突发/预热等实现,适合 JVM 级别控制[参考1,2,3]。
  • 分布式:Redis/Lua 基于原子计数与滑动窗口实现,适合网关/集群限流;Nginx/网关内置令牌桶策略可结合 Redis 存储[参考2,4,5]。

取舍与策略

  • 对不可丢请求的接口:可选阻塞等待或队列;对非关键路径:采用快速失败与降级。
  • 窗口与容量参数需结合 QPS/SLA 调整,监控拒绝率与尾延迟。

参考与验证

  • [参考1]CSDN:漏桶与令牌桶概念与 Guava RateLimiter 应用:https://blog.csdn.net/tianyaleixiaowu/article/details/74942405
  • [参考2]博客园:三大限流算法与 Redis/Nginx 实践(令牌桶/漏桶/计数器):https://www.cnblogs.com/crazymakercircle/p/15187184.html
  • [参考3]SegmentFault:Java 接口限流(漏桶/令牌桶与 Guava 示例):https://segmentfault.com/a/1190000015967922
  • [参考4]腾讯云:漏桶/令牌桶与 Redis 限流工程实践与注意事项:https://cloud.tencent.com/developer/article/2206987
  • [参考5]博客园:令牌桶限流的原理与网关实践综述:https://www.cnblogs.com/DTinsight/p/18221858

关键词校验

关键词覆盖限流算法与工程实现,与正文一致。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部