Sentinel
流控規則
配置流量控制規則
閾值種類
QPS:每秒鍾請求數(request per second) 線程數:每秒鍾線程數
流控模式
直接:就是直接觸發流控效果 關聯:就是關聯資源達到了流控閾值,我本身進行流控(訂單服務限流,那么我也進行限流) 鏈路:更加細粒度的(如限制了service中的一個方法,在controller中有兩個方法都可以調用它,我們針對於controller其中一個進行限制,而另一個則不限制)【service中方法為abc,controller中方法為f1與f2,我們鏈路設置f1,那么我們頻繁訪問f1則觸發限流,而無論怎么訪問f2都不會觸發限流(也就是說當前abc方法是針對於f1調用的限流,限流的是f1調用abc方法的這條鏈路!)】
流控效果
快速失敗:直接給出友好提示 warm up:QPS如果突然間很高,這種方式是根據我們數據的預熱時長,先處理1/3,然后在預熱時間內,逐步提升QPS可以達到閾值(防止QPS突然間的升高,導致的問題) 排隊等待:無論有多少個請求來,就一個個處理,超過超時時間則報超時
降級規則
程序出現問題,觸發降級
RT
平均響應時間(秒級)
平均響應時間超出閾值且在時間窗口內通過的請求>=5,二者同時滿足則觸發降級,在窗口期后關閉斷路器(RT默認最大為4900【一般都足夠了】)
異常比例
QPS>=5且異常比例(秒級統計)超過閾值時觸發降級,時間窗口結束后,關閉降級
異常數
異常數超過閾值時(分鍾統計),觸發降級;時間窗口結束后,關閉降級
熱點規則
針對於某個方法,某個參數進行熱點key的降級
資源名,寫程序中標注@SentinelRescource注解設置的名字
@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKet") 這里value寫什么,在配置里我們就需要配置什么 違背了配置的熱點規則,則觸發deal_testHotKet方法
參數索引則代表該方法第幾個參數(索引從0開始)
高級選項中,選擇參數的類型可以設置如果當前參數值為某個值時可以接收更高的QPS
可以完成效果是:
http://codejiejie.com?a=1 每秒鍾可以承受3個QPS http://codejiejie.com?a=2 每秒鍾可以承受100個QPS http://codejiejie.com?a=3 每秒鍾可以承受200個QPS 其余的任何包含參數a的最高接收3個QPS,不包含參數a的不會觸發熱點規則,即無論如何訪問都不會降級
系統規則
系統的大門,站在整個系統的角度來看的,如果不滿足則直接觸發降級(該系統下全部降級)
@SentinelResource中
fallback管運行時異常
blockHandler管配置違規
持久化
將規則持久化到nacos,需要加配置,並且自己需要在nacos建立配置,自己寫入規則(...,這個屬實不太友好...)
整個過程就是:服務啟動,注冊到nacos,從nacos拉去配置,sentinel獲取這些配置,作為當前服務的配置規則生效!