1. 程式人生 > >原始碼分析 Alibaba sentinel 滑動視窗實現原理(文末附原理圖)

原始碼分析 Alibaba sentinel 滑動視窗實現原理(文末附原理圖)

要實現限流、熔斷等功能,首先要解決的問題是如何實時採集服務(資源)呼叫資訊。例如將某一個介面設定的限流闊值 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 L