阿里Sentine個人記錄

在這裏插入圖片描述
這個方法是入口,裏面會一路走下:
在這裏插入圖片描述
這裏獲取一個鏈條,上面是一個個的slot。會從一個hashmap裏面通過最開始的ket去取,如果沒有的話就會新建一個:
在這裏插入圖片描述
這裏面放的就是那些關鍵的slot,說明一個key,一條鏈

每個slot裏具體執行的東西看這個:https://www.jianshu.com/p/7936d7a57924

ResourceWrapper
sentinel 控制的對象即爲資源,調用entry方法的時候會new 一個資源對象,資源由一個全局唯一的資源名稱標識。
Context
sentinel 的處理的上下文,包含了上下文名稱,一個調用鏈一個context,可以顯示創建或者在調用entry的時候隱式創建。
Node
持有運行時的資源的各種統計數據。

一個 resource 在同一個Context 中有且僅有一個DefaultNode 與之對應
一個 resource 全局有且僅有一個ClusterNode

Entry
代表一次對資源的訪問,每訪問一個資源都會創建一個Entry,在context中以一個雙向鏈表存在。
必須調用exit() 方法的原因就在於這個鏈表:exit方法中會判斷上下文的當前 entry 是不是 this,此時其他entry掉用exit會發現不想等,從而拋出異常。

加入A方法裏調用三個其他方法,那麼就是一個context,三個entry。
如果B方法也調用那三個黨法,那麼現在就有兩個context。然後這三個方法的總體會保存在clusterNode裏,在走到statisticSlot的時候會進行線程數++和passCount++,用的atomicInteger

關於時間滑動窗口看這個:https://www.jianshu.com/p/6ee4b7bdb844
關於時間邊界的問題,sentinel是把一秒默認拆分成兩個500ms,個人覺得是不是有點少。。。
statisticSlot在計算線程數和QPS的時候,每個單獨的chain會通過clusterNode來計算:
在這裏插入圖片描述
在這裏插入圖片描述

令牌桶和rateLimiter:https://blog.csdn.net/tianyaleixiaowu/article/details/74942405
下面這段話解釋Sentinel裏的rateLimit和warmUp
在這裏插入圖片描述
在Sentinel裏的話,就是storePermits如果小於一定值,比如最大令牌數的一半,說明再提高QPS就有風險,那麼就勻速的使用,所以叫warmUp,如果storePermit大於安全值裏,說明空閒的令牌(storePermits)比較多,就可以加速QPS。
勻速算法的話就是鏈接裏的解釋,就是記住上次的請求時間,如果QPS=5的話,那麼這個時間到下個1/5=200ms之間就不允許請求通過。
storePermit怎麼算?: 下一次請求允許時間-當前時間 內的permits

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章