实战Alibaba Sentinel:深度解析微服务高并发流量治理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.1.5 获取当前时间戳的前一个Bucket

根据当前时间戳计算出当前Bucket的时间窗口的开始时间戳,使用当前Bucket的时间窗口的开始时间戳减去Bucket的时间窗口大小就能定位出前一个Bucket。

由于滑动窗口在实现上使用的数据结构是数组,数组的每个元素都会被循环使用,因此当前Bucket与前一个Bucket可能会相差一个完整的滑动窗口周期,如图4.3所示。

图4.3 定位前一个Bucket

如果当前时间戳对应的Bucket的时间窗口的开始时间戳为1595974702000,那么前一个Bucket的时间窗口的开始时间戳可能是1595974701000,也可能是一个滑动窗口周期之前的时间戳1595974641000。

因此,在获取当前Bucket的前一个Bucket时,需要将Bucket的时间窗口的开始时间戳与当前时间戳比较,如果跨越了一个滑动窗口周期,就说明这个Bucket不是我们想要的。