首頁>技術>

目錄前言整合Sentinel流控設定流控模式流控效果總結前言

之前介紹了Sentinel基本工作原理,以及Sentinel的監控,接下來老顧來注重介紹一下Sentinel的流控管理。

注:之前部署了Sentinel Dashboard在192.168.5.153伺服器上

nohup java -jar sentinel-dashboard-1.6.3.jar &

整合Sentinel

首先我們建立一個spring boot專案,引入依賴

我們採用了最新版本boot 2.1.x 和 cloud的Greenwich.SR2,以及alibaba的2.1.0.RELEASE

我們只要在專案中引入spring-cloud-starter-alibaba-sentinel就可以了。這樣就能獲得限流熔斷功能

配置

下面我們只需要在專案應用中配置一下dashboard伺服器地址

spring.cloud.sentinel.transport.dashboard:配置Sentinel控制檯的ip和埠

請求路徑

我們再建立一個請求控制器,模擬請求介面

啟動

啟動後,請求介面http://localhost/test-b,http://localhost/test-a;檢視sentinel控制檯

表示應用整合Sentinel成功了。下面我們就介紹怎麼進行流控設定

流控設定

在控制檯的“簇點鏈路”選單裡面,就能看到請求介面(也叫端點)的層次關係,看到一些指標(通過QPS,拒絕QPS,執行緒數,平均RT,分鐘通過,分鐘拒絕),操作一欄有個【流控】按鈕

資源名:預設的是請求路徑,當然不一定是路徑,只要是唯一的名稱就行。

針對來源:針對呼叫同一個資源時,Sentinel是能夠區分不同調用者,為不同的呼叫者設定不一樣的流控規則;如:app-a設定QPS型別的流控,app-b設定執行緒數型別的流控。預設default,表示不區分呼叫者。

閾值型別:

QPS:當呼叫這個api的時,QPS達到單機閾值時,就會限流

執行緒數:當呼叫這個api的時,執行緒數達到單機閾值時,就會限流

是否叢集:這個以後再介紹

流控模式直接模式

接著上面的流控設定,Sentinel的流控模式代表的流控的方式,預設【直接】,還有關聯,鏈路。

Sentinel的流控效果:預設【快速失敗】,還有WarmUp,排隊等待。

Sentinel預設的流控處理就是【直接->快速失敗】,我們做個案例:

我們設定一下/test-b介面的流控,QPS單機閥值為1,代表每秒請求不能超出1,要不然就做流控處理,處理方式直接呼叫失敗。

我們呼叫/test-b,慢一點請求,正常返回;快速請求幾次,超過閥值

介面返回了Blocked by Sentinel (flow limiting),代表被限流了。

關聯模式

關聯是什麼意思?

當關聯的資源達到閥值,就限流自己

我們先來測試一下,我們現在有兩個介面/test-a,/test-b;現在我們修改一下之前的流控規格,設定一個關聯

設定了關聯資源為/test-a,上圖設定的效果就是當關聯資源/test-a的qps閥值超過1時,就限流/test-b介面(是不是感覺很霸道,關聯資源達到閥值,是本資源介面被限流了)。

我們來驗證一下,這裡老顧用了PostMan工具來呼叫/test-a,每隔300ms迴圈呼叫。這樣就保證關聯資源/test-a肯定超過了閥值。

我們再來請求/test-b,發現被限流了

這種關聯模式有什麼應用場景呢?

我們舉個例子,訂單服務中會有2個重要的介面,一個是讀取訂單資訊介面,一個是寫入訂單資訊介面。

在高併發業務場景中,兩個介面都會佔用資源,如果讀取介面訪問過大,就會影響寫入介面的效能。業務中如果我們希望寫入訂單比較重要,要優先考慮寫入訂單介面。那就可以利用關聯模式;

在關聯資源上面設定寫入介面,資源名設定讀取介面就行了;這樣就起到了優先寫入,一旦寫入請求多,就限制讀的請求。

關聯模式的核心就是保護關聯資源的。

鏈路模式

只記錄鏈路入口的流量

上面是解釋,有點不是太清楚,我們來看個案例,我們改造一下程式碼

上面增加了一個服務,方法用@SentinelResource進行註解

@SentinelResource以後會解釋,大家可以理解就是一個資源名

讓/test-a和/test-b都呼叫這個服務;那我們就可以利用鏈路模式設定限制哪個入口的流量了

這樣設定就起到了,請求介面/test-a會呼叫getOrder,會進行流量控制;但/test-b則不會。

流量效果快速失敗

就是流量達到閥值,直接返回報異常

WarmUp

也叫預熱,根據codeFactor(預設3)的值,從(閥值/codeFactor)為初始閥值,經過預熱時長,才到達設定的QPS的閥值

上面是什麼意思呢?我們來舉個案例,閥值為100,預熱時長設定10秒。

代表的含義就是,系統初始化的閥值為 100/3 ,即閥值為33;然後過了10秒,閥值才恢復到100

這個預熱的應用場景,如:秒殺系統在開啟的瞬間,會有很多流量上來,很有可能把系統打死,預熱方式就是把為了保護系統,可慢慢的把流量放進來,慢慢的把閥值增長到設定的閥值。

排隊等待

從字面上面就能夠猜到,勻速排隊,讓請求以均勻的速度通過,閥值型別必須設成QPS,否則無效。

上圖的設定含義:/test-b的每秒1此請求,超過的話就排隊等待,等待的超時時間為10000毫秒。

我們再次利用Postman工具,迴圈請求/test-b,我們看看控制檯的日誌輸出

我們可以發現test-b的每隔1秒執行一次,這麼多的請求沒有被拒絕,而且進入的排隊。

排隊的應用場景是什麼呢?

比如有時候系統在某一個時刻會出現大流量,之後流量就恢復穩定,可以採用這種排隊模式,大流量來時可以讓流量請求先排隊,等恢復了在慢慢進行處理

總結

Sentinel的流控方式還是比較實用的,功能比較強大,也是阿里通過自己的實戰總結提煉的。小夥伴們要去實戰體驗一下哦,謝謝!!!

---End---

最近老顧上傳了微服務閘道器的分享課程,請大家多多支援

推薦閱讀

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

2、如何搭建訊息中介軟體應用框架之SpringCloud Stream

3、面試必備:閘道器異常了怎麼辦?如何做全域性異常處理?

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

5、Gateway網關係列開篇:SpringCloud的官方閘道器Gateway介紹

6、API閘道器在微服務架構中的應用,這一篇就夠了

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

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

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共享配置、灰度配置

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Spring技術內幕
  • 延伸閱讀