SpringCloud Alibaba之阿里開源Sentinel系統自適應、授權控制

目錄

  1. 前言
  2. 系統規則
  3. 原理
  4. 黑白名單控制
  5. 規則配置
  6. 示例
  7. 總結

前言

系統在生產環境運行過程中,我們經常需要監控服務器的狀態,看服務器CPU、內存、IO等的使用率;主要目的就是保證服務器正常的運行,不能被某些應用搞崩潰了;而且在保證穩定的前提下,保持系統的最大吞吐量

長期以來,系統自適應保護的思路是根據硬指標,即系統的負載 (load1) 來做系統過載保護。當系統負載高於某個閾值,就禁止或者減少流量的進入;當 load 開始好轉,則恢復流量的進入。

系統規則

Sentinel的系統保護規則是從應用級別的入口流量進行控制

,從單臺機器的總體 Load、RT、入口 QPS 、線程數和CPU使用率五個維度監控應用數據,讓系統儘可能跑在最大吞吐量的同時保證系統整體的穩定性。

系統保護規則是應用整體維度的,而不是資源維度的,並且僅對入口流量生效。入口流量指的是進入應用的流量(EntryType.IN),比如 Web 服務或 Dubbo 服務端接收的請求,都屬於入口流量。

SpringCloud Alibaba之阿里開源Sentinel系統自適應、授權控制

上圖中系統規則支持以下的閾值類型:

  • Load(僅對 Linux/Unix-like 機器生效):當系統 load1 超過閾值,且系統當前的併發線程數超過系統容量時才會觸發系統保護。系統容量由系統的 maxQps * minRt 計算得出。設定參考值一般是 CPU cores * 2.5。
  • CPU使用率:當系統 CPU 使用率超過閾值即觸發系統保護(取值範圍 0.0-1.0)。
  • RT:當單臺機器上所有入口流量的平均 RT 達到閾值即觸發系統保護,單位是毫秒。
  • 線程數:當單臺機器上所有入口流量的併發線程數達到閾值即觸發系統保護。
  • 入口 QPS:當單臺機器上所有入口流量的 QPS 達到閾值即觸發系統保護。

原理

先用圖來說明:

SpringCloud Alibaba之阿里開源Sentinel系統自適應、授權控制

我們把系統處理請求的過程想象為一個水管,到來的請求是往這個水管灌水,當系統處理順暢的時候,請求不需要排隊,直接從水管中穿過,這個請求的RT是最短的;反之,當請求堆積的時候,那麼處理請求的時間則會變為:排隊時間 + 最短處理時間

上圖中我們可以總結出:

  • 如果我們能夠保證水管裡的水量,能夠讓水順暢的流動,則不會增加排隊的請求;也就是說,這個時候的系統負載不會進一步惡化。
  • 當保持入口的流量是水管出來的流量的最大的值的時候,可以最大利用水管的處理能力。

黑白名單控制

很多時候,我們需要根據調用方來限制資源是否通過,這時候可以使用 Sentinel 的黑白名單控制的功能。黑白名單根據資源的請求來源(origin)限制資源是否通過

,若配置白名單則只有請求來源位於白名單內時才可通過;若配置黑名單則請求來源位於黑名單時不通過,其餘的請求通過。

調用方信息通過 ContextUtil.enter(resourceName, origin) 方法中的 origin 參數傳入。

規則配置

SpringCloud Alibaba之阿里開源Sentinel系統自適應、授權控制

黑白名單規則(AuthorityRule)非常簡單,主要有以下配置項:

  • resource:資源名,即限流規則的作用對象
  • limitApp:對應的黑名單/白名單,不同 origin 用 , 分隔,如 appA,appB
  • strategy:限制模式,AUTHORITY_WHITE 為白名單模式,AUTHORITY_BLACK 為黑名單模式,默認為白名單模式

配置起來比較簡單,我們看看代碼編寫是怎麼樣的

示例

比如我們希望控制對資源 test 的訪問設置白名單,只有來源為 appA 和 appB 的請求才可通過,則可以配置如下白名單規則:

SpringCloud Alibaba之阿里開源Sentinel系統自適應、授權控制

總結

今天老顧介紹的兩個知識點比較簡單,但是也是比較實用的。下面老顧將深入介紹Sentinel;謝謝!!!

---End---


最近老顧上傳了微服務網關的分享課程,請大家多多支持

1基於RocketMq的SpringCloud Stream框架實戰入門

2、如何搭建消息中間件應用框架之SpringCloud Stream

3面試必備:網關異常了怎麼辦?如何做全局異常處理?

4Gateway網關係列(二):SpringCloud Gateway入門實戰,路由規則

5Gateway網關係列開篇:SpringCloud的官方網關Gateway介紹

6

API網關在微服務架構中的應用,這一篇就夠了

7學習Lambda表達式看這篇就夠了,不會讓你失望的哦(續篇)

8Lambda用在哪裡?幾種場景?

9、為什麼會出現Lambda表達式,你知道嗎?

10、不說“分佈式事務”理論,直接上大廠阿里的解決方案,絕對實用

11、女程序員問到這個問題,讓我思考了半天,Mysql的“三高”架構

12、大廠二面:CAP原則為什麼只能滿足其中兩項?而不能同時滿足

13、阿里P7二面:聊聊零拷貝的原理

14、秒殺系統的核心點都在這裡,快來取

15、你瞭解如何利用token方式實現分佈式Session嗎?

16、Mysql索引結構演變,為什麼最終會是那個結構呢?讓你一看就懂

17、一場比賽涉及到的知識,用通俗易通的方式介紹併發協調

18、企業實戰Redis全方面思考,你思考了嗎?

19、面試題:Thread的start和run的區別

20、面試題:什麼是CAS?CAS的作用以及缺點

21、如何訪問redis中的海量數據?避免事故產生

22、如何解決Redis熱點問題?以及如何發現熱點?

23、如何設計API接口,實現統一格式返回?

24、你真的知道在生產環境下如何部署tomcat嗎?

25、分享一線互聯網大廠分佈式唯一ID設計 之 snowflake方案

26、分享大廠分佈式唯一ID設計方案,快來圍觀

27、你想了解一線大廠的分佈式唯一ID生成方案嗎?

28、你知道如何處理大數據量嗎?(數據拆分篇)

29、如何永不遷移數據和避免熱點? 根據服務器指標分配數據量(揭秘篇)

30、你知道怎麼分庫分表嗎?如何做到永不遷移數據和避免熱點嗎?

31、你瞭解大型網站的頁面靜態化嗎?

32、你知道如何更新緩存嗎?如何保證緩存和數據庫雙寫一致性?

33、你知道怎麼解決DB讀寫分離,導致數據不一致問題嗎?

34、DB讀寫分離情況下,如何解決緩存和數據庫不一致性問題?

35、你真的知道怎麼使用緩存嗎?

36、如何利用鎖,防止緩存擊穿?重構思想的重要性

37、海量訂單產生的業務高峰期,如何避免消息的重複消費?

38、你知道如何保障生產端100%消息投遞成功嗎?

39、微服務下的分佈式session該如何管理?

40、阿里二面:filter、interceptor、aspect應如何選擇?很多人中招

41、互聯網架構重要組員CDN,很多高級開發都沒有實操過,來看這裡

42、阿里二面:CDN緩存控制原理,看看能不能難住你

43、SpringCloud Alibaba之Nacos多環境多項目管理

44、SpringCloud Alibaba系列之Nacos配置中心玩法

45、SpringCloud Alibaba之Nacos註冊中心

46、SpringCloud Plus版本之SpringCloud Alibaba

47、SpringCloud Alibaba之Nacos集群、持久化

48、SpringCloud Alibaba之Nacos共享配置、灰度配置

49、SpringCloud Alibaba之Sentinel工作原理

50、SpringCloud Alibaba之Sentinel流控管理

51、SpringCloud Alibaba之Sentinel降級管理

52、SpringCloud Alibaba之Sentinel熱點參數限流

53、SpringCloud Alibaba之Sentinel的API實戰


分享到:


相關文章: