安裝Sentinel
- 下載sentinel-dashboard-1.8.2.jar
- 安裝有jdk環境,8080端口未被占用
- 在jar包所在目錄打開cmd,輸入命令啟動:java -jar sentinel-dashboard-1.8.2.jar
- 瀏覽器訪問sentinel的web控制台,用戶名和密碼是sentinel:http://localhost:8080/
限流:流控模式
-
直接
當我們監控到請求后,在請求下面,點擊流控規則 --> 新增流控規則;資源名為接口映射路徑
以上選擇QPS+單機閾值表示每秒鍾請求超過閾值后,直接失敗;若選擇線程數+單機閾值表示當線程數達到閾值時限流;區別:選擇QPS,達到閾值后就不能請求了,選擇線程數,達到閾值后依然可以請求,但請求會一直堵着
-
關聯:
A請求關聯B請求,當B請求達到閾值后會限制A請求
-
鏈路:
業務層有一個方法getOrder,控制層有兩個方法test1、test2都調用了getOrder方法,當getOrder請求數達到閾值,限制test1的請求,test2依然可請求
詳情可參考:https://blog.csdn.net/Ezerbel/article/details/107919230
限流:流控效果
- 快速失敗:請求數超過閾值后,返回錯誤信息
- Warm Up(預熱):
單機閾值/3=初始時每秒的處理數量;以上表示最初每秒能處理3條請求,經過預熱時長5秒后每秒能處理10條 - 排隊:
指定每秒能處理的請求數,超出閾值后的請求將繼續等待,等待時間為 <超時時間ms>
降級
-
平均響應時間:
序號1表示選擇平均響應時間策略,序號2表示閾值,序號3表示熔斷時間
以上表示:訪問testD請求,平均響應時間表示1秒處理5個請求,序號2表示200ms處理5條,導致處理不了;且每秒訪問testD請求超過5條,兩個條件同時滿足時,會觸發服務降級熔斷1秒;1秒過后,關閉降級
Sentinel 1.7.0才有平均響應時間(DEGRADE_GRADE_RT),Sentinel 1.8.0的沒有這項,取而代之的是慢調用比例
-
異常比例:
訪問testD請求,每秒請求數大於5條,且每秒出現異常的比例大於0.2,則觸發降級
若在一秒內發送一條請求,這條請求會出異常,這時每秒請求數小於5,異常比例100%超出閾值,就不會觸發降級,而是返回一個錯誤頁面 -
異常數:
每分鍾訪問的請求中,出現異常的數量超過閾值5則觸發降級
- 降級是請求超時或出現異常時能返回提示信息或有執行備用的方法,返回Blocked by Sentinel (flow limiting)是sentinel默認提示信息
熱點參數限流
-
統計某個請求訪問時傳入的參數,當該參數達到閾值則進行限流
-
熱點key限流案例:
編寫方法接口/testHotKey,@SentinelResource中指定資源名和兜底的方法
在sentinel請求下面,點擊熱點規則 --> 新增熱點限流規則;參數索引0表示該請求的第一個參數p1
以上表示訪問/testHotkey同時傳入參數p1,每秒訪問次數超過閾值1則執行兜底的方法
以上表示:訪問該請求且傳入第一個參數,訪問次數超過閾值則執行兜底的方法,如果第一個參數的值等於5,每秒訪問達到200才執行兜底的方法
只有sentinel頁面配置的限流規則才能觸發降級,方法本身的異常不能觸發降級
系統規則:
系統規則是限流系統所有的請求訪問,例如訪問系統的請求總數不能超過閾值,或系統的cup使用率不能超過指定值