基於Rainbond 對微服務進行請求速率限制

2021-10-06 08:29:41 字數 1665 閱讀 9194

rainbond 預設支援基於 envoy 的全域性速率限制。在 rainbond 預設提供的綜合網路治理外掛程式中呈現。本文我們將乙個用例呈現 rainbond 中全域性速率限制的使用方式。

rainbond平台已部署完成。

在rainbond中部署可訪問的 demo 業務。

為此元件開通綜合網路治理外掛程式。

1.部署全侷限**務需要使用的 redis 元件,使用映象redis:alpine建立元件,元件建立後在埠設定中將 6379 埠別名修改為redis,開啟對內服務許可權。

2.部署全侷限**務,使用映象的方式部署全侷限**務。使用以下 dockerrun 命令建立元件,元件可部署到業務的同乙個應用中。新增後使其依賴上步安裝的 redis 元件。

docker run -e use_statsd=false -e redis_socket_type=tcp -e redis_url=$:$ -e runtime_root=/data -e runtime_subdirectory=ratelimit -v /data/ -p 8081:8081 barnett/ratelimit:v1.4.0 /bin/ratelimit
新增成功後切換到元件埠設定頁面,將 8081 埠對內服務開啟並設定埠別名為rate_limit_server

預設使用的全侷限**務是 envoy 的預設實現,你可以根據 envoy 的速率限**務 api 規範進行自定義實現。

3.新增速率限制配置檔案

進入全侷限**務元件的環境管理中,新增配置檔案,檔案路徑為/data/ratelimit/config/config.yaml

domain: limit.common

descriptors:

- key: remote_address

rate_limit:

unit: second

requests_per_unit: 10

# black list ip

- key: remote_address

value: 50.0.0.5

rate_limit:

unit: second

requests_per_unit: 0

新增完配置檔案後重啟元件。

4.業務元件依賴限**務元件並更新外掛程式配置

配置完成後更新外掛程式配置即可。

5.驗證速率限制是否生效

我們可以使用ab命令進行壓力測試

結果會顯示如下:

concurrency level:      20

time taken for tests: 6.132 seconds

complete requests: 1000

failed requests: 794

(connect: 0, receive: 0, length: 794, exceptions: 0)

non-2xx responses: 794

可見 1000 次請求有 794 次被限制,被速率限制駁回的請求訪問碼為429

基於Spring Cloud的微服務落地

hystrix 容器管理元件,實現斷路器模式,倘若依賴的服務出現延遲或故障,則提供強大的容錯功能。ribbon 客戶端負載均衡的服務呼叫元件。feign 基於ribbon和hystrix的宣告式服務呼叫元件。zuul 閘道器元件,提供智慧型路由 訪問過濾等功能。archaius 外部化配置元件。sp...

基於spring boot的rest微服務框架

週末在家研究spring boot,參考github上的一些開源專案,整了乙個rest微服務框架,取之於民,用之於民,在github上開源了,位址如下 主要特性如下 資料訪問 資料庫初始化指令碼 見src mybatis generator ddl.sql 資料實體 生成 採用mybatis gen...

基於spring boot的rest微服務框架

週末在家研究spring boot,參考github上的一些開源專案,整了乙個rest微服務框架,取之於民,用之於民,在github上開源了,位址如下 主要特性如下 資料訪問 資料庫初始化指令碼 見src mybatis generator ddl.sql 資料實體 生成 採用mybatis gen...