滑动窗口算法
TCP 滑动窗口 (流控):
1 | TCP 发送窗口: |
TCP 的流量控制核心就是滑动窗口——接收方通过 ACK 告诉发送方 rwnd (接收窗口大小),发送方控制未确认的字节数不超过这个窗口。
分布式限流滑动窗口:
固定窗口计数器最大的问题是边界突刺——09:59:59 和 10:00:01 两秒内可能发送两倍限流量的请求。滑动窗口解决这个问题:
1 | 滑动窗口限流 (窗口 = 60s, 粒度 = 6 格每 10s): |
实现可以用数组 + 指针循环移动,也可以用 Redis ZSET(score 为时间戳,ZREMRANGEBYSCORE 删除过期元素,ZCARD 获取窗口内计数)。Sentinel/Gateway 的限流模块广泛使用滑动窗口算法。