配置API的流量控制2.0
流量控制2.0策略可以限制单位时间内API的被调用次数,支持参数流控、基础流控和基于基础流控的特殊流控。
- 基础流控
可以对API、用户、凭据、源IP进行多维度流控,与已有的配置API的流量控制功能一致但不兼容。
- 参数流控
- 基于基础流控的特殊流控
如果此策略在当前实例中不支持,请联系技术支持升级实例到最新版本。
策略参数会明文展示,为防止信息泄露,请谨慎配置。
使用限制
- 如果一个API绑定流量控制策略后,继续绑定流量控制2.0策略,流量控制策略会失效。
- 参数流控的参数支持1-32个字符;参数流控的规则最多可定义100个。
- 策略内容最大长度65535。
- 一个API只能绑定一个相同类型的策略。
- 策略和API本身相互独立,只有为API绑定策略后,策略才对API生效。为API绑定策略时需指定发布环境,策略只对指定环境上的API生效。
- 策略的绑定、解绑、更新会实时生效,不需要重新发布API。
- API的下线操作不影响策略的绑定关系,再次发布后仍然会带有下线前绑定的策略。
- 如果策略与API有绑定关系,则策略无法执行删除操作。
创建流量控制2.0策略
- 进入API网关控制台页面。
- 根据实际业务在左侧导航栏上方选择实例。
- 在左侧导航栏选择“API管理 > API策略”。
- 在“策略管理”页面,单击“创建策略”。
- 在“选择策略类型”弹窗中,选择“插件策略 > 流量控制2.0”。
- 在“创建策略”弹窗中,配置策略信息。
表1 流量控制2.0参数说明 参数
说明
策略名称
填写策略的名称,根据业务规划自定义。建议您按照一定的命名规则填写策略名称,方便您快速识别和查找。
策略类型
固定为“流量控制2.0”。
描述
填写策略的描述信息。
策略内容
策略的配置内容,支持表单配置和脚本配置两种方式。
流控类型
推荐使用高性能流控。
- 高精度流控:高并发场景下实例内部会有一定的性能损耗,适用于并发量较小的场景。
- 高性能流控:高并发场景下实例内部性能损耗较小,单位时间内会偶现较小的误差值,适用于并发量较大的场景。
- 单机流控:实例的每个节点各自进行流控,高并发场景下实例内部性能损耗最小,单位时间内会存在一定的误差值,适用于并发量更大的场景。
策略生效范围
时长
流量限制的时长。
- 与“API流量限制”配合使用,表示单位时间内的单个API请求次数上限。
- 与“用户流量限制”配合使用,表示单位时间内的单个用户请求次数上限。
- 与“凭据流量限制”配合使用,表示单位时间内的单个凭据请求次数上限。
- 与“源IP流量限制”配合使用,表示单位时间内的单个IP地址请求次数上限。
API流量限制
单个API被调用次数上限。
与“时长”配合使用,表示单位时间内的单个API请求次数上限。
用户流量限制
单个用户调用API次数上限,如果API认证方式为IAM认证,用户流量根据项目ID来限制;如果API认证方式为APP认证,用户流量根据账号ID来限制。账号ID和项目ID请参考下文“特殊租户”配置说明。
- 不超过“API流量限制”。
- 与“时长”配合使用,表示单位时间内的单个用户请求次数上限。
- 如果主账号下有多个子用户访问API,按主账号累计的调用次数进行限制。
凭据流量限制
单个凭据调用API次数上限,仅适用于API的安全认证方式为APP认证时。
- 不超过“API流量限制”。
- 与“时长”配合使用,表示单位时间内的单个凭据请求次数上限。
源IP流量限制
单个IP地址调用API次数上限。您可以选择配置实例的“real_ip_from_xff”参数使用X-Forwarded-For头中的IP作为流控的判断依据。
- 不超过“API流量限制”。
- 与“时长”配合使用,表示单位时间内的单个IP地址请求次数上限。
参数流控配置
参数流控配置开关。开启后,以参数维度进行流控限制。
定义参数
定义用于规则匹配的参数。
- 参数位置:用于规则匹配的参数位置。
- path:API请求的URI,系统默认配置。
- method:API请求方法,系统默认配置。
- Header:请求头的key值。
说明:
建议不要设置敏感信息,以防泄露。
- Query:QueryString的key值。
- System:系统参数。
- 参数:用于判断与规则匹配中的参数值是否匹配。
定义规则
定义规则的匹配条件,以及API流量限制和时长。
单击“添加规则”,可添加多个规则。
- 规则
单击,可添加多个条件表达式,选择“定义参数”中的参数名和判断条件,以及输入参数值。
- =为等于
- !=为不等于
- pattern为正则表达式
- enum为枚举值,多个参数值之间用英文逗号分隔
- API流量限制
- 时长
例如,在“定义参数”中添加参数“Host”,参数位置选择“Header”;在“定义规则”中添加一条规则,匹配条件设置成“Host = www.abc.com”,API流量限制为10,时长为60s。表示在60s内,对于请求头域中Host参数等于“www.abc.com”的API,且API调用次数达到10,参数流控生效。
特殊流控配置
特殊流控配置开关。开启后,“基础流控”的用户流量限制/凭据流量限制与“特殊流控”的特殊租户/特殊凭据共同作用时,以特殊流控值为准。
特殊租户
租户ID为账号ID或项目ID。
- 绑定APP认证的API时,租户ID为项目ID,获取项目ID。
- 绑定华为IAM认证的API时,租户ID为账号ID,不支持细分到IAM用户维度,获取账号名和账号ID。
阈值为单位时间内,此租户访问API的最大值,不超过“基础流控”的API流量限制值。
特殊凭据
选择已有凭据,阈值为单位时间内,此凭据访问API的最大值,不超过“基础流控”的API流量限制值。
- 单击“确定”。
- 如果您需要复制已创建的策略,请在已创建策略的“操作”列中单击“克隆”配置参数即可。
克隆策略的名称不能与已创建的策略名称重复。
- 策略创建后,您还需要为策略绑定API,才能使策略对API生效。
- 如果您需要复制已创建的策略,请在已创建策略的“操作”列中单击“克隆”配置参数即可。
脚本配置示例
{ "scope": "basic", "default_interval": 60, "default_time_unit": "second", "api_limit": 100, "app_limit": 50, "user_limit": 50, "ip_limit": 20, "specials": [ { "type": "app", "policies": [ { "key": "e9230d70c749408eb3d1e838850cdd23", "limit": 10 } ] }, { "type": "user", "policies": [ { "key": "878f1b87f71c40a7a15db0998f358bb9", "limit": 10 } ] } ], "algorithm": "counter", "parameters": [ { "id": "3wuj354lpptv0toe0", "value": "reqPath", "type": "path", "name": "reqPath" }, { "id": "53h7e7j11u38l3ocp", "value": "method", "type": "method", "name": "method" }, { "id": "vv502bnb6g40td8u0", "value": "Host", "type": "header", "name": "Host" } ], "rules": [ { "match_regex": "[\"Host\",\"==\",\"www.abc.com\"]", "rule_name": "u8mb", "time_unit": "second", "interval": 2, "limit": 5 } ] }