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

4.1.3 WindowWrap

因为Bucket自身并不保存时间窗口信息,所以Sentinel给Bucket添加了一个包装类WindowWrap,用于记录Bucket的时间窗口信息。WindowWrap类的源码如下。

• windowLengthInMs:Bucket的时间窗口大小。

• windowStart:时间窗口的开始时间戳。

• value:被包装的Bucket。

假设Bucket的时间窗口大小为1秒,那么Bucket统计的就是1秒内的请求成功总数、请求异常总数、总耗时等指标数据。如果时间窗口为[1577017699000, 1577017699999],那么1577017699000就是该Bucket的时间窗口的开始时间戳(windowStart),因为1秒等于1000毫秒,所以1000毫秒就是该Bucket的时间窗口大小(windowLengthInMs)。

windowStart+windowLengthInMs=时间窗口结束时间

给定一个时间戳,判断该时间戳是否在Bucket的时间窗口内的算法实现如下。