源码解读四:滑动窗口数据统计

源码解读四:滑动窗口数据统计

概述

本篇章我们分析在 Sentinel 中的核心算法:滑动窗口数据统计算法。这是一个高性能的,应对写大于读场景的统计算法。流控的前提首先就是统计当前的访问数据,判断访问数据是否超过阈值,超过则触发一定的行为。这就是流控的基本逻辑。显然,这里面统计当前访问数据就是一个最为基础也是最为重要的事情。

在 Sentinel 中,统计访问数据是通过一种被命名为滑动窗口的数据结构来实现的。那下面,我们就来分析下这个滑动窗口的原理和代码实现。

思路

实现限流,需要解决的实际上是高性能的统计问题。只有高效的统计单位时间内的请求数量后,才能根据请求数量是否超出限制,来判断下一次请求是否被允许。

Sentinel 采用的是滑动窗口的方式。可以形象的想象为一条无限延展的时间线,上面有个窗口,窗口随着时间的进行不断的向前移动,访问数据落在时间轴上,在滑动窗口的范围内则是纳入统计的数据。可以用图的形式进行类比,以下是统计周期为 1S 的滑动窗口示意。

在 0~0.5S 的时候

image-20201023000643449

在 0.5~1S 的时候

image-20201023000619994

在 1~1.5S 的时候

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值