亲宝软件园·资讯

展开

源码分析 Alibaba sentinel 滑动窗口实现原理(文末附原理图)

中间件兴趣圈 人气:1
要实现限流、熔断等功能,首先要解决的问题是如何实时采集服务(资源)调用信息。例如将某一个接口设置的限流阔值 1W/tps,那首先如何判断当前的 TPS 是多少?Alibaba Sentinel 采用滑动窗口来实现实时数据的统计。 > 温馨提示:如果对源码不太感兴趣,可以先跳到文末,看一下滑动窗口的设计原理图,再决定是否需要阅读源码。 @[TOC](本节目录) ## 1、滑动窗口核心类图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191229144055643.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ByZXN0aWdlZGluZw==,size_16,color_FFFFFF,t_70) 我们先对上述核心类做一个简单的介绍,重点关注核心类的作用与核心属性(重点需要探究其核心数据结构)。 - Metric 指标收集核心接口,主要定义一个滑动窗口中成功的数量、异常数量、阻塞数量,TPS、响应时间等数据。 - ArrayMetric 滑动窗口核心实现类。 - LeapArray 滑动窗口顶层数据结构,包含一个一个的窗口数据。 - WindowWrap 每一个滑动窗口的包装类,其内部的数据结构用 MetricBucket 表示。 - MetricBucket 指标桶,例如通过数量、阻塞数量、异常数量、成功数量、响应时间,已通过未来配额(抢占下一个滑动窗口的数量)。 - MetricEvent 指标类型,例如通过数量、阻塞数量、异常数量、成功数量、响应时间等。 ## 2、滑动窗口实现原理 #### 2.1 ArrayMetric 滑动窗口的入口类为 ArrayMetric ,我们先来看一下其核心代码。 ~~~java private final LeapArray

加载全部内容

相关教程
猜你喜欢
用户评论