---
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
关键词校验
关键词覆盖限流算法与工程实现,与正文一致。

发表评论 取消回复