算法 | 原理 | 时间复杂度 | 空间复杂度 | 问题 | 适用场景 |
---|---|---|---|---|---|
固定窗口 | 固定时间窗口计数 | O(1) | O(1) | 临界突变 | 容易实现,适用于一些简单的流控场景,流量比较均匀,或者允许临界突变 |
滑动窗口 | 窗口拆分,子窗口独立统计,按窗口时间滑动,统一限流。 | O(1) | O(M) - M为子窗口数 | 精度&平滑度 | 适用大多数场景,可以通过调节采样子窗口数来平衡开销 |
漏桶算法 | 基于(出口) | 流速来做流控 | O(1) | O(1) | 突发流量被整形 要求输出速率恒定的场景,能够平滑流量 |
令牌桶算法 | 基于(入口) | 流速来做流控 | O(1) | O(1) | 允许一定程度突发流量 与漏桶类似,区别在于允许一定的突发流量 |
滑动日志 | 基于请求日志做流控 | O(log(N)) | O(N)-最大日志数 | 精度高,时间&空间复杂度高 | 要求完全精确的控制,保证任意T时刻内流量不超过N,高时间和空间复杂度,性能最差 |
流控比较
最新推荐文章于 2025-04-24 09:30:00 发布