Soul網關限流插件Sentinel和Resilience4J掃盲
Soul網關限流插件Sentinel掃盲
首先看Soul中Sebtinel可以配置的項目
對應的配置的含義
-
degrade count:熔斷閾值
-
whether to open the degrade (1 or 0):是否開啟熔斷,1開啟 0關閉
-
degrade type:熔斷類型、熔斷策略,slow call ratio(秒級RT) 、 exception ratio(異常比例)、 exception number strategy(分鍾級異常數)
-
degrade window size:降級窗口期大小,單位s
-
control behavior: warm up(預熱/冷啟動方式,流量緩慢增加)、 constant speed queuing (勻速排隊)、 preheating uniformly queued
-
grade count:限流閾值
-
whether control behavior is enabled (1 or 0):是否開啟限流,1開啟 0關閉
-
grade type:限流閾值類型 ,QPS 、number of concurrent threads(當前線程數)
但是從界面和參數代表的意思可以看到,實際上熔斷和限流的開關開啟對其他參數的設置是有影響的但是界面彈窗卻沒有體現這一點,按照理想狀態應該是開啟了熔斷開關再去顯示其他的熔斷參數,同樣的限流也是這樣的。另外對於界面上使用數字調整 whether to open the degrade 的值且並未對值得大小做限制的情況。我覺得還是需要調整的。
。可以看到代碼中即是開啟熔斷或者限流的開關之后才會去加載相關配置
Soul網關限流插件Resilience4J掃盲
同樣的首先看Soul網關中Resilience4J可以配置的項目
-
token filling period (ms):刷新令牌的時間間隔,單位ms,默認值:500。
-
token filling number:每次刷新令牌的數量,默認值:50。
-
control behavior timeout (ms):熔斷服務,對外停止服務持續時間,單位ms
-
circuit enable:是否開啟熔斷,0:關閉,1:開啟,默認值:0。
-
circuit timeout (ms):熔斷超時時間,請求服務響應超過此時間,則觸發熔斷,單位ms,默認值:30000。
-
fallback uri:降級處理的uri。
-
sliding window size:滑動窗口大小,默認值:100。
-
sliding window type:滑動窗口類型,0:基於計數,1:基於時間,默認值:0。
-
enabled error minimum calculation threshold: 開啟熔斷的最小請求數,超過這個請求數才開啟熔斷統計,默認值:100。
-
degrade opening duration:熔斷器開啟持續時間,單位ms,默認值:10
-
half open threshold:半開狀態下的環形緩沖區大小,必須達到此數量才會計算失敗率,默認值:10。
-
degrade failure rate:錯誤率百分比,達到這個閾值,熔斷器才會開啟,默認值50。
可以看到這里也是熔斷器開啟了才會去加載某些配置,可以看到,這里的兩個1的魔數,實際上可以被修改為固定的參數值類似Sentinel中設置的。當然我感覺可能設置成true或者false更好,期待有序優化。另外還有一個參數可以關注的就是半開狀態這個參數,因為不理解這個半開狀態的意思。所以在網上具體的查了一下,描述如下
CircuitBreaker的狀態轉換通過一個有限狀態機來實現的,有3種常用狀態: 關閉(CLOSED)、打開(OPEN)、半開(HALF_OPEN)和2種特定狀態:不可用(DISABLED)、強制打開(FORCE_OPEN)
- CLOSED ==> OPEN:單向轉換。當請求失敗率超過閾值時,熔斷器的狀態由關閉狀態轉換到打開狀態。失敗率的閾值默認50%,可以通過設置CircuitBreakerConfig實例的failureRateThreshold屬性值進行改變。
- OPEN <==> HALF_OPEN:雙向轉換。打開狀態的持續時間結束,熔斷器的狀態由打開狀態轉換到半開狀態。這時允許一定數量的請求通過,當這些請求的失敗率超過閾值,熔斷器的狀態由半開狀態轉換回打開狀態。半開時請求的數量是由CircuitBreakerConfig實例的ringBufferSizeInHalfOpenState屬性值設置的。
- HALF_OPEN ==> CLOSED:如果請求失敗率小於閾值,則熔斷器的狀態由半開狀態轉換到關閉狀態。
- DISABLED和FORCE_OPEN這2種狀態僅僅是表示退出上面3種狀態時的臨界狀態標識,這2種狀態不會被記錄到統計指標中,也不會發送狀態轉換事件。
如下圖所示轉換關系
我認為的可優化項
- 根據熔斷或限流開關的設置再展示其他的配置項
- 去掉魔數1調整開關項的配置為true或false。
歡迎搜索關注本人與朋友共同開發的微信面經小程序【大廠面試助手】和公眾號【微瞰技術】,以及總結的分類面試題https://github.com/zhendiao/JavaInterview