服务限流

更新时间:

在高并发场景下,为保证在现有资源条件下服务正常运行,使用服务限流让请求和并发在应用可接受的范围内,达到高可用的目的。服务网格的限流通过 MOSN 实现,支持统一的限流模型,对用户透明,并且在产品层增加了 trafficCondition 的流量匹配规则。

限流原理

服务限流生效流程如下:mv

  1. 服务限流通过微服务管控台 MS 下发限流配置到分布式配置中心 DRM。

  2. DRM 将限流的动态配置下发到 MOSN。

    限流规则在客户端或服务端生效,以下流程以客户端限流为例

  3. 客户端应用进行访问时,MOSN 会监控应用流量,如果触发限流规则,应用流量即被限制。

注意事项

  • 您可以添加多条限流规则,若存在服务名和匹配条件相同,但限速不同的限流规则时,生效限速更小的限流规则。

  • 请根据您的实际环境合理配置限速规则,不合理的限速规则可能导致应用访问异常。

添加限流规则

  1. 登录 SOFAStack 控制台

  2. 在左侧菜单栏选择 中间件 > 微服务平台 > 服务网格 > 服务治理,然后单击 服务限流 页签

  3. 单击 添加限流规则,然后配置以下参数:

    参数

    说明

    规则名称

    配置服务限流的规则名称。

    应用

    配置应用名称。星号(*)表示所有应用。

    限流方向

    选择流量限制的方向,可选值为:

    • 服务端限流:规则在服务端生效。

      选择此项时,应用 需填写服务端的应用,服务 方法 填写服务端的服务和方法。

    • 客户端限流:规则在客户端生效。

      选择此项时,应用 需填写客户端的应用;服务 填写客户端需要调用的服务;方法 填写客户端需要调用服务端服务的方法。

    服务

    根据限流方向设置限流的服务。单击 切换输入模式 可在手动填写与下拉选择之间切换。

    方法

    配置限流的方法。星号(*)表示所有方法。

    限流类型

    选择限流的类型,可选值为:

    • QPS:单位时间内允许的最大请求数。

    • 最大并发数:同一时间内允许的最大访问线程数。

    运行模式

    设置限流规则的运行方式,可选值为:

    • 拦截模式:限流规则生效。

    • 观察者模式:限流规则不生效,仅在 MOSN 中打印限流日志。

    限流算法

    使用令牌桶(Token Bucket)算法进行限流。仅在 限流类型 QPS 时设置。

    系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。详情请参见 令牌桶算法

    令牌桶系数

    设置令牌桶的系数,以决定令牌桶的最大值。默认为 1。

    令牌数最大值 =(限流阈值 ÷ 单位时间)× 令牌桶系数

    单位时间 ms

    设置限速规则的单位时间,单位为 ms。仅在 限流类型 QPS 时设置。

    限流阈值

    根据选择的限流类型设置限流阈值:

    • 限流类型QPS 时:表示单位时间内允许通过最大请求数的值,超过该数值的请求会被限流。

    • 限流类型最大并发数 时:表示同一时间内允许连接的最大访问线程数,超过该阈值的线程会被限流。

    流量精确匹配

    设置流量的匹配条件,满足匹配条件的流量才会使用限流规则。置空此项时表示匹配所有流量。

    您可以配置多条匹配条件,多个条件是与的关系,按顺序进行匹配。参数配置如下:

    • 字段:可选择系统字段和请求头。

    • 字段名:根据字段类型有不同的值。

      • 系统字段:包括流量类型、调用方应用名、调用方 IP、服务方应用名。

      • 请求头:请求头是指协议的请求头,比如 Dubbo 协议取的是 attachment,HTTP 协议取的是 Request Header。用户可以在应用系统中自定义请求头参数和值。

    • 选择逻辑:包括等于、不等于、属于、不属于、正则。

    • 字段值:字段名对应的值。

  4. 单击 提交,然后单击 确定

  5. 在限流规则列表中,将刚刚创建的限流规则的状态改为

编辑限流规则

您可以随时编辑已创建的限流规则,编辑规则会在提交后实时生效。

  1. 服务限流 页签,单击目标限流规则右侧的 编辑

  2. 按需求编辑限流规则后,单击 提交

删除限流规则

您可以删除已创建的限流规则,删除规则的操作会实时生效,请谨慎操作。

  1. 服务限流 页签,单击目标限流规则右侧的 编辑

  2. 单击 确定