Sentinel 的滑动窗口算法是其在统计和控制流量时所采用的一种高效且精确的数据结构。与传统的固定窗口或滑动窗口计数器不同,Sentinel 设计了一种创新的滑动窗口数据结构来实现对系统流量的实时统计。
在 Sentinel 中,滑动窗口主要用来记录一段时间内(通常是1秒)资源请求的次数,并且能够做到更加平滑地处理流量突增情况,防止因瞬间大量请求导致限流误判。
-
窗口分割:Sentinel 将时间窗口划分为多个小的时间单元,比如 1 秒可以细分成多个更小的时间段(如50毫秒一个窗口),这样就形成了一个包含多个子窗口的滑动窗口。
-
动态统计:每个时间段内的请求会被统计到对应的小窗口中。随着时间的推移,窗口会进行动态滑动更新,旧窗口过期的数据将不再计入统计,新窗口开始累积新的请求次数。
-
精确控制:当需要判断是否触发限流规则时,Sentinel 会检查所有当前有效的子窗口中的请求总数,如果总量超过预设的阈值,则判定为触发了限流。
这种设计的优势在于:
- 对于瞬态流量尖峰有较好的容忍度,因为它考虑的是最近一段时间窗口内的平均请求速率。
- 实现了更为精细的流量统计,提高了限流的精确性,尤其是在高并发场景下。
通过这种方式,Sentinel 能够更好地模拟真实世界中的流量变化,避免了简单计数可能导致的问题,实现了更准确、更灵活的流量控制机制。