Sentinel 基于滑动窗口的实时指标数据统计

Sentinel 是基于滑动窗口实现的实时指标数据统计,要深入理解 Sentinel 的限流实现原理,首先我们得要了解其指标数据统计的实现,例如如何统计 QPS。

为了简单,我们不直接分析 Sentinel 的源码,而是分析笔者从 Sentinel 中摘抄的,且经过改造后的“qps-helper”工具包的代码。总体上是一样的,笔者去掉了一些不需要的指标统计,以及将 Sentinel 一些自定义的类替换成 JDK 提供的类,封装成通用的 QPS 统计工具包。当然,您也可以直接看 Sentinel 的源码,差别不大,源码在 sentinel-core 的 slots 包下。

qps-helper 代码下载地址:

https://github.com/wujiuye/qps-helper

Bucket

Sentinel 使用 Bucket 统计一个窗口时间内的各项指标数据,这些指标数据包括请求总数、成功总数、异常总数、总耗时、最小耗时、最大耗时等,而一个 Bucket 可以是记录一秒内的数据,也可以是 10 毫秒内的数据,这个时间长度称为窗口时间。qps-helper 只统计请求成功总数、请求异常数、总耗时。

public class MetricBucket {
    /**
     * 存储各事件的计数,比如异常总数、请求总数等
     */
    private final LongAdder[] counters;
    /**
     * 这段事件内的最小耗时
     */
    private volatile long minRt;
}

如上面代码所示,Bucket


版权声明:本文为baidu_28523317原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。