算法 | 原理 | 时间复杂度 | 空间复杂度 | 问题 | 适用场景 |
---|---|---|---|---|---|
固定窗口 | 固定时间窗口计数 | O(1) | O(1) | 临界突变 | 容易实现,适用于一些简单的流控场景,流量比较均匀,或者允许临界突变 |
滑动窗口 | 窗口拆分,子窗口独立统计,按窗口时间滑动,统一限流。 | O(1) | O(M) - M为子窗口数 | 精度&平滑度 | 适用大多数场景,可以通过调节采样子窗口数来平衡开销 |
漏桶算法 | 基于(出口) | 流速来做流控 | O(1) | O(1) | 突发流量被整形 要求输出速率恒定的场景,能够平滑流量 |
令牌桶算法 | 基于(入口) | 流速来做流控 | O(1) | O(1) | 允许一定程度突发流量 与漏桶类似,区别在于允许一定的突发流量 |
滑动日志 | 基于请求日志做流控 | O(log(N)) | O(N)-最大日志数 | 精度高,时间&空间复杂度高 | 要求完全精确的控制,保证任意T时刻内流量不超过N,高时间和空间复杂度,性能最差 |
流控比较
最新推荐文章于 2023-11-06 17:08:36 发布
本文深入探讨了四种流量控制算法:固定窗口、滑动窗口、漏桶算法和令牌桶算法。固定窗口适合简单场景,滑动窗口提供更精确的控制,漏桶用于平滑流量,而令牌桶则允许一定程度的突发流量。每种算法的时间和空间复杂度、适用场景及优缺点都有所不同,选择时需根据实际需求平衡精度、平滑度和资源消耗。
摘要由CSDN通过智能技术生成