源码解读四:滑动窗口数据统计
文章目录
概述
本篇章我们分析在 Sentinel 中的核心算法:滑动窗口数据统计算法。这是一个高性能的,应对写大于读场景的统计算法。流控的前提首先就是统计当前的访问数据,判断访问数据是否超过阈值,超过则触发一定的行为。这就是流控的基本逻辑。显然,这里面统计当前访问数据就是一个最为基础也是最为重要的事情。
在 Sentinel 中,统计访问数据是通过一种被命名为滑动窗口的数据结构来实现的。那下面,我们就来分析下这个滑动窗口的原理和代码实现。
思路
实现限流,需要解决的实际上是高性能的统计问题。只有高效的统计单位时间内的请求数量后,才能根据请求数量是否超出限制,来判断下一次请求是否被允许。
Sentinel 采用的是滑动窗口的方式。可以形象的想象为一条无限延展的时间线,上面有个窗口,窗口随着时间的进行不断的向前移动,访问数据落在时间轴上,在滑动窗口的范围内则是纳入统计的数据。可以用图的形式进行类比,以下是统计周期为 1S 的滑动窗口示意。
在 0~0.5S 的时候
在 0.5~1S 的时候
在 1~1.5S 的时候