服务端限流算法
一、滑动时间窗口算法
-
设定目标限流maxQps。
-
根据当前时间获取对应的时间窗口
-
根据统计数据计算出当前时间窗口内的请求量是否大于maxQps
-
小于则处理本次请求,更新统计数据,否则按限流处理
如图中的滑窗实现,按200ms对时间进行分配,窗口大小1000ms,时间戳1001落在1000~1200的时间片,则统计200~1200这个窗口内的请求数。优缺点:
-
实现简单
-
时间分片的实现下,容易在时间片临界点出现流量抖动
-
流量较大时,容易在一个时间片的开始就用完了限速额,直到窗口向前滑动一格才再次有额度,导致实际处理的流量不均匀
二、令牌桶算法