服务限流
服务限流是对服务调用的速率或并发进行限制。这是在资源有限的情况下,分布式系统应对突发流量的一种常用的自我保护和保护上下游系统的保障可用性手段。SOFAMesh 当前提供了单机限流的功能。
限流原理
服务限流生效流程如下:
服务限流通过微服务管控台 MS 下发限流配置到分布式配置中心 DRM。
DRM 将限流的动态配置下发到 MOSN。
限流规则在客户端或服务端生效,以下流程以客户端限流为例。
客户端应用进行访问时,MOSN 会监控应用流量,如果触发限流规则,应用流量即被限制。
注意事项
您可以添加多条限流规则,若存在服务名和匹配条件相同,但限速不同的限流规则时,生效限速更小的限流规则。
请根据您的实际环境合理配置限速规则,不合理的限速规则可能导致应用访问异常。
添加限流规则
登录 服务网格控制台。
在左侧菜单栏单击 服务治理,然后单击 服务限流 页签。
单击 添加限流组规则,然后配置以下参数:
参数
说明
规则名称
配置服务限流的规则名称。
应用
配置应用名称。星号(*)表示所有应用。
限流方向
选择流量限制的方向,可选值为:
服务端限流:规则在服务端生效。
选择此项时,应用 需填写服务端的应用,服务 和 方法填写服务端的服务和方法。
客户端限流:规则在客户端生效。
选择此项时,应用 需填写客户端的应用;服务 填写客户端需要调用的服务;方法填写客户端需要调用服务端服务的方法。
服务
根据限流方向设置限流的服务。单击 切换输入模式可在手动填写与下拉选择之间切换。
方法
配置限流的方法。星号(*)表示所有方法。
限流模式
选择限流模式,可选值为:
单机限流:针对单机进行限速。
集群限速:针对集群进行限速。
限流类型
选择限流的类型,可选值为:
QPS:单位时间内允许的最大请求数。
最大并发数:同一时间内允许的最大访问线程数。
计数器选择
选择为集群限流配置的计数器。
单击 计数器配置 可跳转到计数器配置页面。
运行模式
设置限流规则的运行方式,可选值为:
拦截模式:限流规则生效。
观察者模式:限流规则不生效,仅在 MOSN 中打印限流日志。
限流算法
使用令牌桶(Token Bucket)算法进行限流。仅在 限流类型 为 QPS 时设置。
系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。详情请参见 限流算法选择。
令牌桶系数
设置令牌桶的系数,以决定令牌桶的最大值。默认为 1。
令牌数最大值 =(限流阈值 ÷ 单位时间)× 令牌桶系数
单位时间 ms
设置限速规则的单位时间,单位为 ms。仅在 限流类型 为 QPS时设置。
限流阈值
根据选择的限流类型设置限流阈值:
限流类型为 QPS时:表示单位时间内允许通过最大请求数的值,超过该数值的请求会被限流。
限流类型为 最大并发数时:表示同一时间内允许连接的最大访问线程数,超过该阈值的线程会被限流。
流量精确匹配
设置流量的匹配条件,满足匹配条件的流量才会使用限流规则。置空此项时表示匹配所有流量。
您可以配置多条匹配条件,多个条件是与的关系,按顺序进行匹配。参数配置如下:
字段:可选择系统字段和请求头。
字段名:根据字段类型有不同的值。
系统字段:包括流量类型、调用方应用名、调用方 IP、服务方应用名。
请求头:请求头是指协议的请求头,比如 Dubbo 协议取的是 attachment,HTTP 协议取的是 Request Header。用户可以在应用系统中自定义请求头参数和值。
选择逻辑:包括等于、不等于、属于、不属于、正则。
字段值:字段名对应的值。
单击 提交,然后单击 确定。
在限流规则列表中,将刚刚创建的限流规则的状态改为 开。
编辑限流规则
您可以随时编辑已创建的限流规则,编辑规则会在提交后实时生效。
在 服务限流页签,单击目标限流规则右侧的 编辑。
按需求编辑限流规则后,单击 提交。
导出限流规则
您可以将已配置的限流规则导出,以备份您的限流规则。
在 服务限流 页签,选择 更多> 导出。
选中目标规则,然后单击 导出。
导入限流规则
您可以导入备份的限流规则,以快速创建限流规则。
在 服务限流 页签,选择 更多> 导入。
单击 选择文件,然后选中目标文件后,单击 确定。
删除限流规则
您可以删除已创建的限流规则,删除规则的操作会实时生效,请谨慎操作。
在 服务限流 页签,单击目标限流规则右侧的 编辑。
单击 确定。