Soul限流插件之RateLimiter插件
從Soul的RateLimiter插件的配置可以看到

RateLimiter是依賴于Redis的,可以看到限流也可以基于Redis的三種模式的單機(standlone),集群(cluster)和哨兵(sentinel)模式

在插件處理的開啟的程序中即進行了Redis模式的配置

在選擇器規則中兩個主要的配置的含義

- capacity(容量):是允許用戶在一秒鐘內執行的最大請求數,這是令牌桶可以保存的令牌數,
- rate(速率):是你允許用戶每秒執行多少請求,而丟棄任何請求,這是令牌桶的填充速率,
通過之前的學習可以知道,插件的具體執行邏輯在插件的執行方法doExecute中

而更為關鍵的執行則是RateLimiter的isAllowed方法,

可以看到在方法內部,將配置表單中的兩個方法引數直接傳遞給了執行限流的lua腳本,并由lua腳本進行具體的限流操作

另外,最后執行的檔案位置位于/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


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/256614.html
標籤:Java
上一篇:前端編譯與優化
