什么是滑动窗口?
滑动窗口是一种常用于实时数据统计和分析的技术,其原理在于不断移动的时间窗口,以捕捉最新的数据变化情况。滑动窗口能够提供持续更新的统计数据,而不是在固定时间间隔内进行一次性统计。
滑动窗口技术常用于统计特定时间段内的事件或数据点,在各种限流场景中尤为实用。滑动窗口通过将整个时间窗口分割成若干较小的时间片段来实现统计。这些时间片段各自独立记录在其间发生的请求数量。随着时间的推移,最早的时间片段会逐渐被新的时间片段取代,从而呈现出一种“滑动”的效果。这种设计既能实时更新统计数据,又能有效控制请求流量,避免系统过载。
如何理解滑动窗口原理?
原理大概能看明白,但又不是很明白的样子!!!
再来看看一张图,好像已经明白了
添加图片注释,不超过 140 字(可选)
可以想象一下,你有一块小窗口(比如一块浅色玻璃),你可以把它放在一大串数字上,然后透过这个窗口只能看到一部分数字。然后,你可以把这个窗口沿着数字串慢慢移动,每次看到新的数字,同时一些旧的数字就会移出窗口。
假设你有一串数字:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],你有一个窗口,可以一次看到3个数字。你可以这样做:
- 初始位置:把窗口放在前面3个数字上,所以你看到的是[1,2,3,4,5,6]。
- 向前滑动一步:把窗口向前移动一个位置,现在你看到的是[2,3,4,5,6,7]。
- 继续滑动:再向前滑动一步,你看到的是[3,4,5,6,7,8]。
滑动窗口与固定窗口区别?
添加图片注释,不超过 140 字(可选)
固定窗口就像是在某个时间段内截取一段数据进行分析。它是静止的,不会移动。举个例子,你每天早上记录昨天24小时的气温,这就是一个固定窗口。
特点:
- 固定时间段:窗口的时间段是固定的,比如从00:00到24:00。
- 一次性统计:在指定时间段结束后才进行统计和分析。
- 适合总结和报告:通常用于生成每日、每周或每月的报告。
比如:
- 你每天早上查看前一天的步数统计。
- 每个月底统计当月的销售额。
滑动窗口
滑动窗口则是一个动态窗口,它会随着时间的推移不断前移。想象一下,你有一个移动的观察窗,它会每小时记录过去24小时内的气温。每小时更新一次,这样你总是有一个最新的24小时气温记录。
特点:
- 动态更新:窗口会随着时间不断向前移动,实时更新数据。
- 连续监控:可以实时反映当前的数据变化情况,适合实时监控和快速响应。
- 更细致的分析:能捕捉到更短时间内的变化。
比如:
- 你每小时记录过去24小时的步数统计。
- 实时监控网站的访问量,每分钟更新一次,记录过去1小时内的访问量。
滑动窗口使用场景?
限流和熔断:滑动窗口在流量控制中用于统计单位时间内的请求数、错误率等指标,以决定是否需要限流或熔断。例如,Sentinel 使用滑动窗口实时统计 QPS(每秒请求数)和错误率,帮助系统进行限流和熔断操作。
实时数据分析:滑动窗口在流式数据处理系统(如 Apache Flink、Apache Storm)中,用于实时统计和分析数据流,计算移动平均值、计数等指标。
TCP 滑动窗口:在TCP协议中,滑动窗口用于控制数据流的发送和接收速度,确保高效可靠的数据传输,避免网络拥塞。
我是栈江湖,如果你喜欢此文章,不要忘记关注+点赞哦!你的支持是我创作的动力。如果你有任何意见或建议,欢迎在下方留言。若转载,请注明文章来源。