固定窗口和滑动窗口,你真的分得清吗?快来看看!

简介: 滑动窗口是一种用于实时数据统计和分析的技术,通过不断移动的时间窗口捕捉最新数据变化。它常用于限流、实时数据分析和TCP协议中的流量控制,能够提供持续更新的统计数据,有效控制请求流量,避免系统过载。与固定窗口相比,滑动窗口更加动态和灵活,适合实时监控和快速响应。

什么是滑动窗口?

滑动窗口是一种常用于实时数据统计和分析的技术,其原理在于不断移动的时间窗口,以捕捉最新的数据变化情况。滑动窗口能够提供持续更新的统计数据,而不是在固定时间间隔内进行一次性统计。

滑动窗口技术常用于统计特定时间段内的事件或数据点,在各种限流场景中尤为实用。滑动窗口通过将整个时间窗口分割成若干较小的时间片段来实现统计。这些时间片段各自独立记录在其间发生的请求数量。随着时间的推移,最早的时间片段会逐渐被新的时间片段取代,从而呈现出一种“滑动”的效果。这种设计既能实时更新统计数据,又能有效控制请求流量,避免系统过载。

如何理解滑动窗口原理?

原理大概能看明白,但又不是很明白的样子!!!

再来看看一张图,好像已经明白了


添加图片注释,不超过 140 字(可选)


可以想象一下,你有一块小窗口(比如一块浅色玻璃),你可以把它放在一大串数字上,然后透过这个窗口只能看到一部分数字。然后,你可以把这个窗口沿着数字串慢慢移动,每次看到新的数字,同时一些旧的数字就会移出窗口。  

假设你有一串数字:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],你有一个窗口,可以一次看到3个数字。你可以这样做:

  1. 初始位置:把窗口放在前面3个数字上,所以你看到的是[1,2,3,4,5,6]。
  2. 向前滑动一步:把窗口向前移动一个位置,现在你看到的是[2,3,4,5,6,7]。
  3. 继续滑动:再向前滑动一步,你看到的是[3,4,5,6,7,8]。

滑动窗口与固定窗口区别?


添加图片注释,不超过 140 字(可选)


固定窗口就像是在某个时间段内截取一段数据进行分析。它是静止的,不会移动。举个例子,你每天早上记录昨天24小时的气温,这就是一个固定窗口。

特点

  1. 固定时间段:窗口的时间段是固定的,比如从00:00到24:00。
  2. 一次性统计:在指定时间段结束后才进行统计和分析。
  3. 适合总结和报告:通常用于生成每日、每周或每月的报告。

比如

  • 你每天早上查看前一天的步数统计。
  • 每个月底统计当月的销售额。

滑动窗口

滑动窗口则是一个动态窗口,它会随着时间的推移不断前移。想象一下,你有一个移动的观察窗,它会每小时记录过去24小时内的气温。每小时更新一次,这样你总是有一个最新的24小时气温记录。

特点

  1. 动态更新:窗口会随着时间不断向前移动,实时更新数据。
  2. 连续监控:可以实时反映当前的数据变化情况,适合实时监控和快速响应。
  3. 更细致的分析:能捕捉到更短时间内的变化。

比如

  • 你每小时记录过去24小时的步数统计。
  • 实时监控网站的访问量,每分钟更新一次,记录过去1小时内的访问量。

滑动窗口使用场景?

限流和熔断:滑动窗口在流量控制中用于统计单位时间内的请求数、错误率等指标,以决定是否需要限流或熔断。例如,Sentinel 使用滑动窗口实时统计 QPS(每秒请求数)和错误率,帮助系统进行限流和熔断操作。  

实时数据分析:滑动窗口在流式数据处理系统(如 Apache Flink、Apache Storm)中,用于实时统计和分析数据流,计算移动平均值、计数等指标。  

TCP 滑动窗口:在TCP协议中,滑动窗口用于控制数据流的发送和接收速度,确保高效可靠的数据传输,避免网络拥塞。  


我是栈江湖,如果你喜欢此文章,不要忘记关注+点赞哦!你的支持是我创作的动力。如果你有任何意见或建议,欢迎在下方留言。若转载,请注明文章来源。

目录
相关文章
|
监控 供应链 定位技术
什么是 eCPM?它与 CPM 有何不同?
这篇文章解释了eCPM(每千人有效成本)的概念,它与CPM(每千人成本)的区别,如何计算eCPM,以及eCPM的主要优势和底价设置。文章还探讨了影响eCPM值的因素,以及如何确定合适的eCPM目标。
6179 2
什么是 eCPM?它与 CPM 有何不同?
|
消息中间件 存储 Kafka
RocketMQ 工作原理图解,看这篇就够了!
本文详细解析了 RocketMQ 的核心架构、消息领域模型、关键特性和应用场景,帮助深入理解消息中间件的工作原理。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
RocketMQ 工作原理图解,看这篇就够了!
|
存储 算法 NoSQL
|
消息中间件 Kafka 数据处理
Kafka与Flink:构建高性能实时数据处理系统的实践指南
Apache Kafka 和 Apache Flink 的结合为构建高性能的实时数据处理系统提供了坚实的基础。通过合理的架构设计和参数配置,可以实现低延迟、高吞吐量的数据流处理。无论是在电商、金融、物流还是其他行业,这种组合都能为企业带来巨大的价值。
|
网络协议 API 网络安全
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
2452 0
|
监控 Java Spring
AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑
AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑
1565 1
|
NoSQL 算法 Java
使用 Spring Boot 实现限流功能:从理论到实践
【6月更文挑战第18天】在微服务和高并发系统中,限流(Rate Limiting)是一种非常重要的技术手段,用于保护系统免受过载,确保服务的稳定性。限流可以控制请求的速率,防止单个客户端或恶意用户消耗过多的资源,从而影响其他用户。
1753 5
|
Windows
Windows批处理(BAT)文件执行时“一闪而过或闪退”问题及解决方法
Windows批处理(BAT)文件执行时“一闪而过或闪退”问题及解决方法
9331 1
|
分布式计算 并行计算 算法
【高并发】什么是ForkJoin?看这一篇就够了!
在JDK中,提供了这样一种功能:它能够将复杂的逻辑拆分成一个个简单的逻辑来并行执行,待每个并行执行的逻辑执行完成后,再将各个结果进行汇总,得出最终的结果数据。有点像Hadoop中的MapReduce。 ForkJoin是由JDK1.7之后提供的多线程并发处理框架。ForkJoin框架的基本思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值分解成多个计算,然后将各个计算结果进行汇总。相应的,ForkJoin将复杂的计算当做一个任务,而分解的多个计算则是当做一个个子任务来并行执行。
7054 0
【高并发】什么是ForkJoin?看这一篇就够了!

热门文章

最新文章