java-chassis 支持 Provider 限流和 Consumer 限流。 Provider 限流控制访问本微服务的流量, Consumer 限流控制发往其他微服务的流量。
注意事项:
operation
的, 使用起来比较简单。后续推荐使用流量特征治理 来限制流量。用户在provider端使用限流策略,可以限制指定微服务向其发送请求的频率,达到限制每秒钟最大请求数量的效果。
限流策略配置在microservice.yaml文件中,相关配置项如下:
配置项 | 默认值 | 取值范围 | 是否必选 | 含义 | 注意 |
---|---|---|---|---|---|
servicecomb.flowcontrol.Provider.qps.enabled | true | true/false | 否 | 是否启用Provider流控 | - |
servicecomb.flowcontrol.strategy | FixedWindow | FixedWindow/LeakyBucket/TokenBucket/自定义 | 否 | 流控策略 | - |
servicecomb.flowcontrol.Provider.qps.limit.[ServiceName].[Schema].[operation] | 2147483647(max int) | (0,2147483647],整型 | 否 | 每秒钟允许的请求数 | 支持microservice/schema/operation三个级别的配置,后者的优先级高于前者 |
servicecomb.flowcontrol.Provider.qps.global.limit | 2147483647(max int) | (0,2147483647],整型 | 否 | provider接受请求流量的全局配置 | 没有具体的流控配置时,此配置生效 |
servicecomb.flowcontrol.Provider.qps.bucket.[ServiceName].[Schema].[operation] | 两倍limit大小,不超过max int | (0,2147483647],整型 | 否 | 令牌桶场景下桶的大小 | 支持microservice/schema/operation三个级别的配置,后者的优先级高于前者 |
servicecomb.flowcontrol.Provider.qps.global.bucket | 两倍limit大小,不超过max int | (0,2147483647],整型 | 否 | 令牌桶场景下provider桶的大小 | 没有具体的流控配置时,此配置生效 |
注意: strategy是全局的策略选择,一旦选择所有流控接口都会应用统一的流控策略,且不支持动态配置变更,如果变更流控策略需要重启服务。
注意: provider端限流策略配置中的
ServiceName
指的是调用该provider的consumer,而schema
、operation
指的是provider自身的。即provider端限流配置的含义是,限制指定consumer调用本provider的某个schema、operation的流量。
ANY
是一个特殊的 ServiceName
, 表示不区分来源微服务, 对所有微服务使用同样的策略。 比如 servicecomb.flowcontrol.Provider.qps.limit.ANY.mySchema.myOperation=200
表示对 mySchema.myOperation
单独限制 200 的流量。
用户在consumer端使用限流策略,可以限制发往指定微服务的请求的频率。
配置项 | 默认值 | 取值范围 | 是否必选 | 含义 | 注意 |
---|---|---|---|---|---|
servicecomb.flowcontrol.Consumer.qps.enabled | true | Boolean | 否 | 是否启用Consumer流控 | - |
servicecomb.flowcontrol.strategy | FixedWindow | FixedWindow/LeakyBucket/TokenBucket/自定义 | 否 | 流控策略 | - |
servicecomb.flowcontrol.Consumer.qps.global.limit | 2147483647(max int) | (0,2147483647],整型 | 否 | consumer发送请求流量的全局配置 | 没有具体的流控配置时,此配置生效 |
servicecomb.flowcontrol.Consumer.qps.limit.[ServiceName].[Schema].[operation] | 2147483647 (max int) | (0,2147483647],整型 | 否 | 每秒钟允许的请求数 | 支持microservice、schema、operation三个级别的配置 |
servicecomb.flowcontrol.Consumer.qps.global.bucket | 两倍limit大小,不超过max int | (0,2147483647],整型 | 否 | 令牌桶场景下consumer桶的大小 | 没有具体的流控配置时,此配置生效 |
servicecomb.flowcontrol.Consumer.qps.bucket.[ServiceName].[Schema].[operation] | 两倍limit大小,不超过max int | (0,2147483647],整型 | 否 | 令牌桶场景下桶的大小 | 支持microservice/schema/operation三个级别的配置,后者的优先级高于前者 |
注意: strategy是全局的策略选择,一旦选择所有流控接口都会应用统一的流控策略,且不支持动态配置变更,如果变更流控策略需要重启服务。
注意: consumer端限流策略配置中的
ServiceName
、schema
、operation
指的是请求的目标服务。
ANY
是一个特殊的 ServiceName
, 表示不区分来源微服务, 对所有微服务使用同样的策略。 比如 servicecomb.flowcontrol.Consumer.qps.limit.ANY.mySchema.myOperation=200
表示对 mySchema.myOperation
单独限制 200 的流量。 如果不同微服务存在一样的 schema
、operation
, 则共享一个流量控制。ANY
在 Consumer 流控很少使用。