Sentinel 限流


Sentinel( https://github.com/alibaba/Sentinel)是一個限流組件。在互聯網系統高可用設計中,限流作為一種托底的手段,保護系統不會被流量沖垮而出現未知的異常。
Sentinel系統的具體設計,可以參考官方文檔,同時也可以參考  這個  , 這里只說一下大概的邏輯:
1. Sentinel限流算是是通過滑動窗口實現,滑動窗口算法可以有效解決計數器法的臨界問題,關於限流的4種算法,可以參考  這里
2. Sentinel通過類似鏈表的方式,組裝了N個solt(最新版本為8個), 這些slot各司其職,作用如下:
  • NodeSelectorSlot 負責收集資源的路徑,並將這些資源的調用路徑,以樹狀結構存儲起來,用於根據調用路徑來限流降級;
  • ClusterBuilderSlot 則用於存儲資源的統計信息以及調用者信息,例如該資源的 RT, QPS, thread count 等等,這些信息將用作為多維度限流,降級的依據;
  • StatisticsSlot 則用於記錄,統計不同維度的 runtime 信息;
  • SystemSlot 則通過系統的狀態,例如 load1 等,來控制總的入口流量;
  • AuthoritySlot 則根據黑白名單,來做黑白名單控制;
  • FlowSlot 則用於根據預設的限流規則,以及前面 slot 統計的狀態,來進行限流;
  • DegradeSlot 則通過統計信息,以及預設的規則,來做熔斷降級;

每個請求都會經過這些solt, 這些slot按照指定的順序放入到SlotChain, 前3個用於統計,后面4個根據統計結果給出不同的操作,每個請求都會經過前面3個slot, 后面4個如果違反任何一個,都會通過拋出異常來短路返回。業務根據拋出的異常進行相應的處理。 

sentinel除了本地模式,還有集群模式,這里就不細說
可以參考我的注解版 https://github.com/zhaoyb/Sentinel


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM