zuul限流控制

2021-09-03 10:35:34 字數 2289 閱讀 2280

簡述

該包實現了在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為併發池,緩...