簡述
該包實現了在zuul對每個服務進行限流。提供的幾種限流方式:
1. 認證使用者(authenticated user)使用方式使用已認證的使用者名稱(username)或'anonymous'
2. 原始請求(request origin)
使用使用者的原始請求
3. url
使用上游請求的位址
4. 針對每個服務的全域性配置
該方式不會驗證request origin,authenticated user或url
使用該方式只需不設定『type』引數即可
pom.xml增加依賴:
com.marcosbarbero.cloud配置示例:spring-cloud-zuul-ratelimit
1.3.2.release
zuul:通用應用程式配置ratelimit:
key-prefix: your-prefix #對應用來標識請求的key的字首
enabled: true
repository: redis #對應儲存型別(用來儲存統計資訊)
behind-proxy: true #**之後
default-policy: #可選 - 針對所有的路由配置的策略,除非特別配置了policies
limit: 10 #可選 - 每個重新整理時間視窗對應的請求數量限制
quota: 1000 #可選- 每個重新整理時間視窗對應的請求時間限制(秒)
refresh-interval: 60 # 重新整理時間視窗的時間,預設值 (秒)
type: #可選 限流方式
- user
- origin
- url
policies:
myserviceid: #特定的路由
limit: 10 #可選- 每個重新整理時間視窗對應的請求數量限制
quota: 1000 #可選- 每個重新整理時間視窗對應的請求時間限制(秒)
refresh-interval: 60 # 重新整理時間視窗的時間,預設值 (秒)
type: #可選 限流方式
- user
- origin
- url
配置命名空間:zuul.ratelimit
policy屬性:
測試1. 啟動乙個zuul服務和乙個api服務,配置正常的路由規則。訪問api:
3. 在postman中集中執行12次相同的api呼叫,結果中有兩次呼叫返回429:
4. 檢視對應的response headers和body的資訊:
自定義key策略
如果希望自己控制key的策略,可以通過自定義ratelimitkeygenerator的實現來增加自己的策略邏輯。
例項:根據請求上的引數來對請求進行限流。比如有乙個請求是http://localhost:8765/api-a//hello2?name=kevin,對相同的name值進行限流。我們設定了1分鐘內,限流10次,那麼如果1分鐘內,name是kevin的請求超過10次,就會發生限流。
ratelimitkeygenerator的實現:
測試
同時傳送13個請求,其中name=kevin的有11次,name=marry的有2次,測試結果如下:
zuul實現的限流
限流一般可以根據客戶端ip,請求的url,使用者登陸資訊進行限制,每秒鐘限制多次數,這從別一方面也提公升了系統的效能,無用的併發沒那麼多了。org.springframework.cloud spring cloud starter zuul com.marcosbarbero.cloud spri...
redis benchmark 限流控制
由於自帶的redis benchmark不能按照設定的tps執行,因此增加tps控制功能。x t t tps 1 t x tps t 其中,x表示處理的請求數,t表示處理x筆請求花費的時間,t 表示需要等待的時間,tps表示設定的tps值利用redis benchmark中自帶的時間事件實現 int...
golang 限流控制
限流 日常開發中,一般會遇到幾種場景需要限流,比如有個api server,需要限制單個使用者的呼叫頻率,避免使用者惡意刷介面或者突發大流量導致服務不可用等,這邊記錄幾個常用的限流方法。併發控制 簡單的併發控制,使用者的所有請求丟到乙個channel裡,再指定乙個帶緩衝區的channel為併發池,緩...