sentinel 是面向分布式服務架構的輕量級流量控制框架,主要以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度來幫助您保護服務的穩定性。
1. sentinel資源&規則
我們說的資源,可以是任何東西,服務,服務裡的方法,甚至是一段**。使用 sentinel 來進行資源保護,主要分為兩個步驟:
定義資源
定義規則
先把可能需要保護的資源定義好,之後再配置規則。也可以理解為,只要有了資源,我們就可以在任何時候靈活地定義各種流量控制規則。在編碼的時候,只需要考慮這個**是否需要保護,如果需要保護,就將之定義為乙個資源。
2. demo分析
以qps流控為分析樣例
定義規則
entry entry = null;
try catch (blockexception e1) catch (exception e2) finally
}可以看到這個限制了只能20個pass,其他block
debug分析
entry = sphu.entry(」abc「);
sphu.entry
public static entry entry(string name) throws blockexception
這裡是sph.entry實際上是ctsph.entry方法
ctsph.entry
ctsph.entry
ctsph. lookprocesschain
public static processorslotchain newslotchain()
resolveslotchainbuilder();
if (builder == null)
return builder.build();
}這裡是spi擴充套件點,如果自己擴充套件,那麼builder就是自己的,不走defaultslotchainbuilder,先不關注spi,關注預設的defaultslotchainbuilder
defaultslotchainbuilder.build
public processorslotchain build()
很明顯chain是乙個責任鏈模式,本質上是個鍊錶,新增很多的slot
然後我們得進入defaultprocessorslotchain看看
3. defaultprocessorslotchain
3.1. 初始化
在這裡層次圖中,以slot結尾的是chain中的元素,也就是乙個乙個的handler,這裡叫slot而已,
這裡的模式很有意思
在defaultprocessorslotchain中有兩個元素first和end兩個引用,型別是abstractlinkedprocessorslot,實際上指向是那些abstractlinkedprocessorslot的子類,flowslot之類
剛剛開始的情況,frist和end都指向乙個匿名內部類
新增slot
最後分析的結果和debug的結果相同
slotchain的entry方法
下面開始看乙個entry走過的流程
ctsph.entrywithpriority
這裡需要關注一點
entry方法 各個slot自己實現
fireentry方法 abstractlinkedprocessorslot定義好了 如果next不為空觸發transformentry方法
transformentry方法 abstractlinkedprocessorslot定義好了 觸發自定義的entry方法
到此,sentinel的工作流程架構就梳理完成
具體的功能是slot的部分
可以看下sentinel自帶提供了那些slot
nodeselectorslot 負責收集資源的路徑,並將這些資源的呼叫路徑,以樹狀結構儲存起來,用於根據呼叫路徑來限流降級;
clusterbuilderslot 則用於儲存資源的統計資訊以及呼叫者資訊,例如該資源的 rt, qps, thread count 等等,這些資訊將用作為多維度限流,降級的依據;
statisticslot 則用於記錄、統計不同緯度的 runtime 指標監控資訊;
flowslot 則用於根據預設的限流規則以及前面 slot 統計的狀態,來進行流量控制;
authorityslot 則根據配置的黑白名單和呼叫**資訊,來做黑白名單控制;
degradeslot 則通過統計資訊以及預設的規則,來做熔斷降級;
systemslot 則通過系統的狀態,例如 load1 等,來控制總的入口流量;
Sentinel流控模式
sentinel流控模式 一.閾值型別 qps 設定每秒能承受的請求數量 執行緒數 設定最多支援的執行緒數量 二.流控模式 直接 對當前資源進行限流操作,設定qps單機閾值,即為當前資源每秒接收請求的上限為5次,超過就限流 關聯 當關聯的資源接收到的請求達到了閾值上線,則對當前資源進行限流操作 鏈路...
Sentinel 流控,看這篇就夠了
sentinel 的設計理念是讓使用者自由選擇控制的角度,並進行靈活組合,從而達到想要的效果。sentinel的閾值型別 qps 每秒鐘的請求數量 當達請求該資源的數量達到了閾值的時候,進行限流 上圖配置的意思是當請求 gettest資源的次數超過每秒5次,就對請求進行限流 執行緒數 當呼叫該資源的...
串列埠流控 軟體流控與硬體流控
在序列通訊處理中,常常看到rts cts和xon xoff這兩個選項,這就是兩個流控制的選項,目前流控制主要應用於數據機的資料通訊中。那麼,流控制在序列通訊中有何作用,在編制序列通訊程式怎樣應用呢?下面我們就談談這個問題。1.流控制在序列通訊中的作用 這裡講到的 流 當然指的是資料流。資料在兩個串列...