滑动窗口计数器

基本概念⌗
一种只记录最近一段时间
的某些数据指标的数据结构. 例如: 最近 30 秒请求成功数, 失败数, 总数.
类似于简单的时序数据库, 但是保留很少数据. 适用于需要统计最近某些数字指标的场景. 例如:
- 自适应断流
- 熔断器
基本思路⌗
将整个时间区间 totalInterval
划分为 n
个桶, 每个桶的时间区间为 totalInterval/n
记作 interval
, 桶使用长度为 n
的环形数组
存放.
now 时刻增加指标的目标桶 index 为 ((now - initTime) / interval) % n
.
增加读取时, 重置过期的桶.
实现⌗
ts 实现: https://github.com/zcong1993/rolling-window
其他⌗
滑动窗口 bucket 也可以存其他任何数据, 例如数组存储对象.
这种滑动窗口, 测试需要测试时间推移, 一些语言 sleep 时间不会那么准, 所以最好实现一个 mockTimer
方便测试.
参考资料⌗
Read other posts