应用服务网格

本地限流

2025-08-13 09:27:46

在业务流量突增的场景下,为了保护系统不被冲垮,一般会采用限流实现对后端系统的保护。ASM服务网格提供了本地限流能力,轻松实现服务限流,下面介绍本地限流功能的操作说明。

创建本地限流策略

1.登录服务网格控制台,选择流量管理中心->本地限流,选择本地限流要生效的命名空间

2.选择使用YAML创建,当前提供了SIDECAR_INBOUND限流配置的模板

3.根据模板修改配置,保存即可

修改本地限流策略

1.登录服务网格控制台,选择流量管理中心->本地限流,选择本地限流要生效的命名空间

2.本地限流页面默认展示当前命名空间下的所有限流策略,在操作栏选择编辑操作修改限流配置

删除本地限流策略

1.登录服务网格控制台,选择流量管理中心->本地限流,选择本地限流要生效的命名空间

2.本地限流页面默认展示当前命名空间下的所有限流策略,在操作栏选择删除操作删除限流配置

本地限流策略配置说明

ASM服务网格采用自定义资源形式实现本地限流配置,下面的限流策略配置匹配app是productpage的工作负载,针对productpage应用的SIDECAR_INBOUND流量进行限流;采用令牌桶算法限流,最大token数量为10token填充间隔为60秒,每次填充10token;限流策略针对所有流量都打开并强制执行;如果请求被限流,在应答头部里会增加x-local-rate-limit: true

apiVersion: istio.ctyun.cn/v1beta1 

kind: LocalRateLimiter

metadata:

  name: productpage-limit

spec:

  workloadSelector:

    # 匹配工作负载

    labels:

      app: productpage

  context: SIDECAR_INBOUND

  statPrefix: http_local_rate_limiter

  configs:

    - name: productpage

      routeConfig:

        vhost:

          name: 'inbound|http|9080'

      rateLimitConfig:

        tokenBucket:

          maxTokens: 10

          tokensPerFill: 10

          fillInterval: 60s

        filterEnabled:

          runtimeKey: local_rate_limit_enabled

          defaultValue:

            numerator: 100

            denominator: HUNDRED

        filterEnforced:

          runtimeKey: local_rate_limit_enforced

          defaultValue:

            numerator: 100

            denominator: HUNDRED

        responseHeadersToAdd:

          - appendAction: OVERWRITE_IF_EXISTS_OR_ADD

            header:

              key: x-local-rate-limit

              value: 'true'

 

LocalRateLimiter详细配置说明:

字段

类型

必选

说明

workload_selector

WorkloadSelector

No

基于标签选择本地限流配置生效的工作负载

context

PatchContext

Yes

本地限流生效的context,枚举值,支持ANY(所有context),SIDECAR_INBOUNDsidecar入流量方向),SIDECAR_OUTBOUNDsidecar出流量方向),GATEWAY(网关);一般情况下,限流发生在服务接收端SIDECAR_INBOUND方向或者在网关进行统一限流

stat_prefix

string

Yes

Prometheus指标前缀

configs

[]LocalRateLimitConfig

No

限流配置

 

LocalRateLimitConfig配置说明

该配置定义了具体的限流参数,如下表:

字段

类型

必选

说明

name

string

No

限流配置的名字

route_config

RouteConfigurationMatch

No

限流策略匹配的路由配置

rate_limit_config

LocalRateLimit

No

限流算法相关参数

 

RouteConfigurationMatch配置:

字段

类型

必选

说明

vhost

VirtualHostMatch

Yes

匹配路由中的虚拟主机,将限流策略应用到对应的虚拟主机

 

VirtualHostMatch配置:

字段

类型

必选

说明

name

string

Yes

匹配的虚拟主机的名字

route

RouteMatch

No

匹配虚拟主机下的特定路由

 

RouteMatch

字段

类型

必选

说明

name

string

Yes

路由匹配名称

action

Action

No

路由匹配操作,枚举值,支持ROUTE(转发),REDIRECT(重定向),DIRECT_RESPONSE(直接返回),或者ANY(任意)

 

LocalRateLimit定义了限流算法相关参数,具体如下:

字段

类型

必选

说明

token_bucket

TokenBucket

Yes

令牌桶算法参数

filter_enabled

RuntimeFractionalPercent

No

使用限流策略的流量比例,不强制执行

filter_enforced

RuntimeFractionalPercent

No

在使用限流策略的流量中强制执行限流的比例

request_headers_to_add_when_not_enforced

[]HeaderValueOption

No

被限流但是未被强制执行的请求转发时添加的头部

response_headers_to_add

[]HeaderValueOption

No

被执行限流的请求添加的应答头部

descriptors

[]LocalRateLimitDescriptor

No

限流描述符列表

local_rate_limit_per_downstream_connection

bool

No

设置为false时,token bucket在sidecar线程间共享;设置为true时,sidecar为每个连接都创建一个token bucket

enable_x_ratelimit_headers

XRateLimitHeadersRFCVersion

No

RFC X-RateLimit标准版本头部定义

vh_rate_limits

VhRateLimitsOptions

No

路由级限流是否需要包含虚拟服务级限流配置

 

FnK.mSVU8PIQ