Soul限流插件之RateLimiter插件

Soul限流插件之RateLimiter插件

從Soul的RateLimiter插件的配置可以看到
file
RateLimiter是依賴於Redis的,可以看到限流也可以基於Redis的三種模式的單機(standlone),集羣(cluster)和哨兵(sentinel)模式
file
在插件處理的開啓的過程中即進行了Redis模式的配置
file
在選擇器規則中兩個主要的配置的含義
file

  • capacity(容量):是允許用戶在一秒鐘內執行的最大請求數。這是令牌桶可以保存的令牌數。
  • rate(速率):是你允許用戶每秒執行多少請求,而丟棄任何請求。這是令牌桶的填充速率。

通過之前的學習可以知道,插件的具體執行邏輯在插件的執行方法doExecute中
file
而更爲關鍵的執行則是RateLimiter的isAllowed方法。
file
可以看到在方法內部,將配置表單中的兩個方法參數直接傳遞給了執行限流的lua腳本,並由lua腳本進行具體的限流操作
file
另外,最後執行的文件位置位於/META-INF/scripts/request_rate_limiter.lua,並且從加載可以看到,文件由Spring-data-redis提供組件進行加載。這也提示我們,如果要對RateLimiter做一些操作。我們可以通過lua腳本的方式來進行。
另外可以看到SoulReactiveRedisTemplate和SoulReactiveScriptExecutor已經將所有的Redis操作和腳本操作變爲Reactive的異步操作,了。這無疑提升了ratelimiter插件的性能

可以總結的是。ratelimiter基於Redis和lua腳本以及Reactive構建了一個高性能的限流插件

歡迎搜索關注本人與朋友共同開發的微信面經小程序【大廠面試助手】和公衆號【微瞰技術】,以及總結的分類面試題https://github.com/zhendiao/JavaInterview

file
file

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章