成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Aeraki系列:如何設置本地限流規則

網絡 通信技術
Aeraki 可以幫助你在服務網格中管理任何七層協議。目前 Aeraki 已經支持了 Dubbo、Thrit、Redis 等開源協議。

 

Aeraki 可以幫助你在服務網格中管理任何七層協議。目前 Aeraki 已經支持了 Dubbo、Thrit、Redis 等開源協議。你還可以使用 Aeraki 的 MetaProtocol 協議擴展框架來管理私有協議的七層流量。

本系列教程將介紹如何通過 Aeraki 來在服務網格中為 Dubbo、Thrift 等協議的服務提供七層流量路由、本地限流、全局限流,以及如何基于 Aeraki Protocol 快速開發一個自定義協議,并在 Istio 服務網格中對采用自定義協議的服務進行管理。

本篇教程介紹如何利用 Areaki 提供的 MetaRouter CRD 資源對基于 MetaProtocol 開發的應用協議設置本地限流規則。

安裝示例程序

如果你還沒有安裝示例程序,請參照 快速開始(https://www.aeraki.net/zh/docs/v1.0/quickstart/) 安裝 Aeraki,Istio 及示例程序。

安裝完成后,可以看到集群中增加了下面兩個 NS,兩個 NS 中分別安裝了基于 MetaProtocol 實現的 Dubbo 和 Thrift 協議的示例程序。你可以選用任何一個程序進行測試。

  1. ➜  ~ kubectl get ns|grep meta 
  2. meta-dubbo        Active   16m 
  3. meta-thrift       Active   16m 

Aeraki 的限流規則設計直觀而靈活,既支持對一個服務的所有入向請求進行限流,也支持按照不同的條件對一個服務器的請求進行細粒度的限流控制。

對服務的所有入向請求進行限流

  1. kubectl apply -f- <<EOF 
  2. apiVersion: metaprotocol.aeraki.io/v1alpha1 
  3. kind: MetaRouter 
  4. metadata: 
  5.   name: test-metaprotocol-thrift-route 
  6.   namespace: meta-thrift 
  7. spec: 
  8.   hosts: 
  9.   - thrift-sample-server.meta-thrift.svc.cluster.local 
  10.   localRateLimit: 
  11.     tokenBucket: 
  12.       fillInterval: 60s 
  13.       maxTokens: 2 
  14.       tokensPerFill: 2 
  15. EOF 

備注:因為本地限流是在一個服務實例上進行處理的,因此當服務有多個實例,實際的限流效果為限流數量乘以實例數量。

使用 aerakictl 命令來查看客戶端的應用日志,可以看到客戶端每分鐘只能成功執行 4 次請求(有兩個服務實例,每個服務實例限流為每分鐘 2 次):

  1. ➜  ~ aerakictl_app_log client meta-thrift -f --tail 10 
  2. Hello Aeraki, response from thrift-sample-server-v1-5c8476684-842l6/172.17.0.40 
  3. Hello Aeraki, response from thrift-sample-server-v2-6d5bcc885-hpx7n/172.17.0.41 
  4. Hello Aeraki, response from thrift-sample-server-v1-5c8476684-842l6/172.17.0.40 
  5. Hello Aeraki, response from thrift-sample-server-v2-6d5bcc885-hpx7n/172.17.0.41 
  6. org.apache.thrift.TApplicationException: meta protocol local rate limit: request '5' has been rate limited 
  7.         at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:79) 
  8.         at org.aeraki.HelloService$Client.recv_sayHello(HelloService.java:61) 
  9.         at org.aeraki.HelloService$Client.sayHello(HelloService.java:48) 
  10.         at org.aeraki.HelloClient.main(HelloClient.java:44) 
  11. Connected to thrift-sample-server 
  12. org.apache.thrift.TApplicationException: meta protocol local rate limit: request '1' has been rate limited 
  13. ... 

按條件對服務的入向請求進限流

Aeraki 支持按照條件為服務設置多個限流規則,以滿足細粒度的限流要求。例如按照用戶或者對接口對請求進行分組,并對每個分組設置不同的限流規則。

分組限流的匹配條件和路由匹配條件相同,任何可以從請求數據包中提取出來的屬性都可以用于限流規則的匹配條件。

例如下面的規則為 sayHello 和 ping 兩個接口分別設置了不同的限流條件:

  1. apiVersion: metaprotocol.aeraki.io/v1alpha1 
  2. kind: MetaRouter 
  3. metadata: 
  4.   name: test-metaprotocol-thrift-route 
  5.   namespace: meta-thrift 
  6. spec: 
  7.   hosts: 
  8.   - thrift-sample-server.meta-thrift.svc.cluster.local 
  9.   localRateLimit: 
  10.     conditions: 
  11.     - match: 
  12.         attributes: 
  13.           method: 
  14.             exact: sayHello 
  15.       tokenBucket: 
  16.         fillInterval: 60s 
  17.         maxTokens: 10 
  18.         tokensPerFill: 10 
  19.     - match: 
  20.         attributes: 
  21.           method: 
  22.             exact: ping 
  23.       tokenBucket: 
  24.         fillInterval: 60s 
  25.         maxTokens: 100 
  26.         tokensPerFill: 100 

同時設置按服務和按條件的限流規則

可以同時設置服務粒度的限流規則和按照條件的限流規則,這適用于需要對一個服務的所有請求設置一個整體的限流規則,同時又需要對某一組或者幾組請求設置例外的情況。

例如下面的限流規則為服務設置了一個 1000 條/分鐘的整體限流規則,同時單獨為 ping 接口設置了 100 條/分鐘的限流條件。

  1. apiVersion: metaprotocol.aeraki.io/v1alpha1 
  2. kind: MetaRouter 
  3. metadata: 
  4.   name: test-metaprotocol-thrift-route 
  5.   namespace: meta-thrift 
  6. spec: 
  7.   hosts: 
  8.   - thrift-sample-server.meta-thrift.svc.cluster.local 
  9.   localRateLimit: 
  10.     tokenBucket: 
  11.       fillInterval: 60s 
  12.       maxTokens: 1000 
  13.       tokensPerFill: 1000 
  14.     conditions: 
  15.     - match: 
  16.         attributes: 
  17.           method: 
  18.             exact: ping 
  19.       tokenBucket: 
  20.         fillInterval: 60s 
  21.         maxTokens: 100 
  22.         tokensPerFill: 100 

理解原理

Aeraki 向 Sidecar Proxy 下發的配置中為服務對應的 Listener 設置了 MetaProtocol Proxy,配置中設置了 local rate limit filter。

Aeraki 會將 MetaRouter 中配置的限流規則翻譯為local rate limit filter 的限流配置,通過 Aeraki 下發給 MetaProtocol Proxy。

可以通過下面的命令查看服務的 sidecar proxy 的配置:

  1. aerakictl_sidecar_config server-v1 meta-thrift |fx 

其中 Thrift 服務的 Inbound Listener 中的 MetaProtocol Proxy 配置如下所示:

  1.  "name""envoy.filters.network.meta_protocol_proxy"
  2.  "typed_config": { 
  3.   "@type""type.googleapis.com/udpa.type.v1.TypedStruct"
  4.   "type_url""type.googleapis.com/aeraki.meta_protocol_proxy.v1alpha.MetaProtocolProxy"
  5.   "value": { 
  6.    "stat_prefix""inbound|9090||"
  7.    "application_protocol""thrift"
  8.    "route_config": { 
  9.     "name""inbound|9090||"
  10.     "routes": [ 
  11.      { 
  12.       "route": { 
  13.        "cluster""inbound|9090||" 
  14.       } 
  15.      } 
  16.     ] 
  17.    }, 
  18.    "codec": { 
  19.     "name""aeraki.meta_protocol.codec.thrift" 
  20.    }, 
  21.    "meta_protocol_filters": [ 
  22.     { 
  23.      "name""aeraki.meta_protocol.filters.local_ratelimit"
  24.      "config": { 
  25.       "@type""type.googleapis.com/aeraki.meta_protocol_proxy.filters.local_ratelimit.v1alpha.LocalRateLimit"
  26.       "stat_prefix""thrift-sample-server.meta-thrift.svc.cluster.local"
  27.       "token_bucket": { 
  28.        "max_tokens": 2, 
  29.        "tokens_per_fill": 2, 
  30.        "fill_interval""60s" 
  31.       } 
  32.      } 
  33.     }, 
  34.     { 
  35.      "name""aeraki.meta_protocol.filters.router" 
  36.     } 
  37.    ] 
  38.   } 
  39.  } 

 

責任編輯:武曉燕 來源: 趙化冰
相關推薦

2022-02-18 14:41:49

Aerakiistio指標

2024-01-03 08:30:54

Redis分布式項目

2016-10-09 09:28:22

Windows 10組策略配置

2010-03-01 15:51:01

WCF限流

2024-11-05 15:02:41

2023-08-08 08:01:22

微服務架構服務

2011-03-16 16:41:57

清空iptables

2023-11-20 10:09:59

2011-07-20 16:42:46

本地組策略

2024-11-29 16:02:17

2012-03-13 11:00:41

imo即時通訊

2025-04-10 08:00:00

服務限流開發高并發

2011-08-11 10:50:08

本地組策略組策略用戶配置

2024-06-11 10:03:56

2024-12-25 15:44:15

2025-04-08 09:20:00

Sentinel限流微服務

2024-02-04 10:08:34

2012-12-17 09:50:40

路由器訪問路由器設置路由器控制

2023-04-07 09:37:42

NixOS家庭管理員

2019-09-26 16:40:57

Linux敏捷項目
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区精 | 亚洲视频第一页 | 亚洲综合一区二区三区 | 久草精品视频 | 黄色一级片aaa| 国产一区二区视频在线 | 日本午夜一区二区三区 | 国产成人精品久久 | 91精品国产综合久久久动漫日韩 | 欧美日韩精品一区 | 欧美一区二区 | 欧美精品一二三 | 99热精品在线观看 | 一区二区三区欧美在线 | 六月色婷 | 亚洲欧洲综合av | 久久久久久久久久久丰满 | 韩日有码 | 国产一区二区三区视频 | 免费日韩网站 | 国产精品揄拍一区二区久久国内亚洲精 | 日本精品一区二区三区在线观看视频 | 超碰在线播 | 欧美一区二区三区在线观看 | 精品欧美一区二区三区 | 九九精品在线 | 最新免费视频 | 99re6在线| 久久精品国产一区二区电影 | 精品国产免费一区二区三区演员表 | 国产精品久久久久久久 | 亚洲一区二区久久 | 午夜三区| 欧美精品一区二区三区在线 | 青青久草 | 国产高清精品一区二区三区 | 紧缚调教一区二区三区视频 | 欧美日韩在线高清 | 日日日视频 | 亚洲午夜视频在线观看 | 99久久精品免费看国产四区 |