上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的时间窗口内的算法实现如下。