前言:
本篇部落格介紹了有關于Sentinel的幾種常用的流控規則。
文章目錄
-
- 一。概述
- 二。QPS-直接-快速失敗
- 三。線程-直接-快速失敗
- 四。QPS-關聯-快速失敗
- 五。QPS-鍊路-快速失敗
- 六。QPS-直接-預熱
- 七。QPS-直接-勻速排隊
一。概述
流量控制(flow control),其原理是監控應用流量的 QPS 或并發線程數等名額,當達到指定的門檻值時對流量進行控制,以避免被瞬時的流量高峰沖垮,進而保障應用的高可用性。
FlowSlot
會根據預設的規則,結合前面
NodeSelectorSlot
、
ClusterBuilderSlot
、
StatisticSlot
統計出來的實時資訊進行流量控制。
限流的直接表現是在執行
Entry nodeA = SphU.entry(resourceName)
的時候抛出
FlowException
異常。
FlowException
是
BlockException
的子類,您可以捕捉
BlockException
來自定義被限流之後的處理邏輯。
同一個資源可以建立多條限流規則。
FlowSlot
會對該資源的所有限流規則依次周遊,直到有規則觸發限流或者所有規則周遊完畢。
一條限流規則主要由下面幾個因素組成,我們可以組合這些元素來實作不同的限流效果:
-
:資源名,即限流規則的作用對象resource
-
: 限流門檻值count
-
: 限流門檻值類型(QPS 或并發線程數)grade
-
: 流控針對的調用來源,若為 default 則不區分調用來源limitApp
-
: 調用關系限流政策strategy
-
: 流量控制效果(直接拒絕、Warm Up、勻速排隊)controlBehavior
官方文檔位址:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
二。QPS-直接-快速失敗
1.說明
當一秒内 QPS 超過某個門檻值的時候,則采取措施進行流量控制。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP35EMRR1T3FEROBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1cjN3QTMwYTMwMjMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2.示例demo
控制器代碼:
3.sentinel控制台操作
4.通路測試
一秒點選一次還是可以正常通路:
若快速點選多次,超過了QPS門檻值,則被限流:
三。線程-直接-快速失敗
1.說明
當一秒内 通路線程數超過某個門檻值的時候,則采取措施進行流量控制。
2.示例demo
控制器代碼:
3.sentinel控制台操作
4.通路測試
快速點選多次依然可以通路:
若打開兩個浏覽器視窗,快速切換并快速重新整理頁面,超過了通路線程數門檻值,則被限流:
四。QPS-關聯-快速失敗
1.說明:
當接口A關聯了接口B時,在通路B接口超過了規定流量門檻值的情況下,接口A也将會被限流
2.示例demo
控制器代碼:
3.sentinel控制台操作
先給testB建立流控規則:
在建立/testA流控規則,關聯/testB:
4.通路測試
使用postman建立新的通路接口集合集中通路
在postman通路testB接口的同時,去通路testA,發現testA被限流:
五。QPS-鍊路-快速失敗
1.說明
當兩個接口A和接口B通路同一個資源時,若對接口A進行了資源的鍊路控制,超過了規定的門檻值後,再次通路接口A去請求資源時會出現報錯
2.執行個體demo
控制器代碼:
service:
配置檔案:
3.sentinel控制台操作
4.通路測試
多次通路/testA接口,超過門檻值再次通路接口A去請求資源時會出現報錯:
六。QPS-直接-預熱
1.說明
warm up就是為了防止突然進入的大流量大系統沖垮,在一定時間内将通路流量慢慢增加
公式:門檻值除以
coldFactor
(預設值為3),經過預熱時長後才會達到門檻值
預設
coldFactor
為3,即請求QPS從
threshold/3
開始,經預熱時長逐漸升至設定的QPS門檻值。
2.執行個體demo
3.sentinel控制台操作
4.通路測試
目前五秒門檻值為10/3=3,快速點選時,觸發限流:
當五秒鐘過預熱後,門檻值到達10,再次快速點選,通路正常:
七。QPS-直接-勻速排隊
1.說明
排隊等待,勻速通過
2.執行個體demo
3.sentinel控制台操作
4.通路測試
再次使用postman接口集合對testB接口進行通路:
背景線程數每隔相應的延遲時間對接口進行通路,實作勻速接口限流: