流控神器 Sentinel 工作原理

2021-09-30 19:20:17 字數 2275 閱讀 1760

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.流控制在序列通訊中的作用 這裡講到的 流 當然指的是資料流。資料在兩個串列...