Guava限流
Guava限流主要通过RateLimiter类实现,其核心基于令牌桶算法,用于控制访问速率,保障系统在高并发场景下的稳定性。
核心算法
Guava的RateLimiter基于令牌桶算法,以固定速率向桶中添加令牌。每个请求需获取令牌才能被处理,若桶中无令牌,请求将被阻塞或拒绝,从而实现流量控制。
主要模式
o 普通限流(SmoothBursty)
以稳定速率生成令牌,允许突发请求,但会通过后续请求的等待时间来平滑流量。
o 预热限流(SmoothWarmingUp)
在系统启动时,逐渐增加令牌生成速率,避免冷启动时因流量突增导致系统过载。
主要方法
- create(double permitsPerSecond):创建限流器,指定每秒生成的令牌数。
- acquire():阻塞方法,获取令牌,若无可用令牌则等待。
- tryAcquire():非阻塞方法,尝试获取令牌,立即返回是否成功。
特点
- 平滑突发流量
通过令牌桶缓冲,允许瞬时流量超过平均速率,但后续请求需等待更长时间以维持平均速率。
- 可配置的速率
通过create方法设置每秒生成的令牌数,灵活调整限流阈值。
- 线程安全
RateLimiter是线程安全的,可在多线程环境中直接使用。
使用场景
- API限流:防止后端服务因恶意攻击或过量请求而崩溃。
- 数据库访问限流:控制对数据库的并发访问,避免过载。
- 资源保护:合理分配系统资源,确保服务质量。
- 安全防护:防止DDoS攻击或接口滥用。
- 用户体验优化:通过平滑流量处理,提升系统响应速度和稳定性。