限流背景
对外提供的API接口必须具备流量控制能力,以防止突发流量导致系统崩溃。类似于电路中的保险丝机制,当流量超过预设阈值时,系统应通过限流策略进行引流或拒绝,保障服务稳定。

主流限流算法
常见的限流算法主要包括漏桶算法和令牌桶算法,两者在控制逻辑与适用场景上有所不同。

漏桶算法
漏桶算法常用于流量整形与速率限制,其核心思想是将请求视作水流,以恒定速率从桶中排出。若进水速率过快,桶满后溢出的请求将被丢弃。该算法能有效平滑流量,避免突发请求冲击系统。

http://images.cnitblog.com/blog/522490/201411/081225378155003.png

漏桶算法强制限制请求处理速率,但缺乏弹性,难以应对合理的突发流量。

令牌桶算法
令牌桶算法以恒定速率向桶中投放令牌,请求到达时需获取令牌方可被处理。若桶中无令牌,则请求被拒绝。该算法在限制平均速率的同时,允许一定程度的流量突发。

http://images.cnitblog.com/blog/522490/201411/081226107372877.png

Google Guava库中的RateLimiter即基于令牌桶算法实现。

算法选择建议
漏桶算法适用于需严格限制瞬时流量的场景,能确保流量输出平稳。令牌桶算法则更适合允许短暂突发的业务场景,提升资源利用率。实际系统中,二者可结合使用,实现对流量的精细化管控。