要理解Sentinel实现限流的源码,首先我们要了解其核心,比如如何统计QPS,只要了解核心功能的实现,我们也可以自己实现一个简单的限流器。Sentinel基于滑动窗口实现实时指标数据统计。
Sentinel如何统计每秒请求数(QPS)
为了简单,我们不直接分析Sentinel的源码,而是分析笔者从Sentinel中摘抄的,且经过改造后的qps-helper的代码。总体上是一样的,笔者去掉了一些不需要的统计数据,以及将Sentinel一些自定义的类替换成JDK提供的类,封装成通用的QPS统计工具包。https://github.com/wujiuye/qps-helper
Bucket
Sentinel以Bucket(桶)为单位记录一个时间窗口内的请求总数、异常总数、总耗时等指标数据,而一个Bucket可以是记录一秒内的数据,也可以是10毫秒内的数据,我们称这个时间窗口为Bucket的统计单位,由使用者自定义。
public