2021-07-12 23:34:56
四种常用限流算法的核心原理与适用场景如下:
漏桶算法
该算法通过固定容量的“漏桶”控制流量输出速率。水滴(请求)以任意速率流入桶中,但仅以恒定速率流出。若流入速率超过桶容量,多余请求会被丢弃。核心优势在于流量平滑性,可避免突发流量冲击系统,适用于需要稳定处理速率的场景(如消息队列削峰填谷)。但其缺点是无法应对突发流量,且可能因桶满丢弃关键请求,导致数据丢失风险。
令牌桶算法
系统按固定速率向桶中添加令牌(如每秒2个),桶满后新令牌被丢弃。请求到达时需获取令牌,若不足则被限流。其核心优势是支持突发流量:桶满时可瞬间处理大量请求(如秒杀活动),且长期平均速率受控。此外,算法可通过动态调整令牌生成速率实现灵活配置。但需注意潜在过载风险(如令牌生成过快导致突发流量压垮系统),且实现复杂度高于漏桶算法。
固定时间窗口算法
将时间划分为固定周期(如每分钟),每个周期内允许固定数量请求。实现简单且资源占用低,适用于对精度要求不高的场景(如API调用次数限制)。但其存在临界点问题:若请求集中在窗口边界(如第59秒和第1秒各发送100次请求),可能导致瞬时流量翻倍,引发系统过载。
滑动时间窗口算法
通过动态调整时间窗口范围(如将1分钟划分为60个1秒片段,窗口随时间滑动),解决固定窗口的临界点问题。核心优势是更精确的流量控制,可避免边界突发流量。但需维护多个时间片段的计数器,计算复杂度较高,且仍存在限流不够平滑的问题(如窗口初期请求被拒绝)。适用于需要平衡精度与性能的场景(如实时风控系统)。
总结对比
实际应用中,可根据业务需求(如是否允许突发、系统资源限制)选择单一算法或组合使用(如令牌桶+滑动窗口)。