zoukankan      html  css  js  c++  java
  • springcloud -- sentinel 滑动时间窗口计数

    针对固定时间算法会在临界点存在瞬间大流量冲击的场景,滑动时间窗口计数器算法应运而生。它将时间窗口划分为更小的时间片段,每过一个时间片段,我们的时间窗口就会往右滑动一格,每个时间片段都有独立的计数器

    sentinel的滑动窗口统计机制就是根据当前时间,获取对应的时间窗口,并更新该时间窗口中的各项统计指标(pass/block/rt等),
    这些指标被用来进行后续判断,比如限流、降级等;随着时间的推移,当前时间点对应的时间窗口是变化的,这时会涉及到时间窗口的初始化、复用等。
    可以说,sentinel上的功能所用到的数据几乎都是滑动窗口统计机制来维护和更新的。

      

    滑动窗口可以先拆为滑动跟窗口两个词,先介绍下窗口,你可以这么理解,一段是时间就是窗口,比如说我们可以把这个1s认为是1个窗口。
    这个样子我们就能将1分钟就可以划分成60个窗口了,这个没毛病吧。如下图我们就分成了60个窗口

     比如现在处于第1秒上,那1s那个窗口就是当前窗口,就如下图中红框表示。

     现在在来看下滑动,滑动很简单,比如说现在时间由第1秒变成了第2秒,就是从当前这个窗口---->下一个窗口就可以了,

    这个时候下一个窗口就变成了当前窗口,之前那个当前窗口就变成了上一个窗口,这个过程其实就是滑动。

    滑动时间窗口

    以bucket (小的时间窗口)来统计,默认值=500ms

     用数组可以避免频繁的gc。足够单一,并且是单节点,保证修改的原子特性

     bucket数组:默认120个,可复用,记录每个小数组发生的所有事件,根据下标定位数组

    定位小数组:拿到时间戳去掉毫秒 % 数组长度 



  • 相关阅读:
    题解——草莓(树上切割)
    题解——碰杯
    SCOI2019凉凉记
    题解rotinv
    矩阵快速幂
    质数及线性筛
    题解[ZJOI2007]矩阵游戏
    【实验舱国庆营模拟】Day3 A.code
    【实验舱国庆营模拟】Day2 A.divide
    【纪中集训2019.08.25】【JZOJ6371】树
  • 原文地址:https://www.cnblogs.com/alomsc/p/15147736.html
Copyright © 2011-2022 走看看