流量控制2.0策略可以限制单位时间内API的被调用次数,支持参数流控、基础流控和基于基础流控的特殊流控。
如果此策略在当前实例中不支持,请联系技术支持升级实例到最新版本。
使用限制
- 已了解前提条件。
- 如果一个API绑定流量控制策略后,继续绑定流量控制2.0策略,流量控制策略会失效。
- 参数流控的参数支持1-32个字符;参数流控的规则最多可定义100个。
- 策略内容最大长度65535。
配置参数说明
表1 配置参数说明
参数 |
配置说明 |
流控类型 |
推荐使用高性能流控。
- 高精度流控:高并发场景下实例内部会有一定的性能损耗,适用于并发量较小的场景。
- 高性能流控:高并发场景下实例内部性能损耗较小,单位时间内会偶现较小的误差值,适用于并发量较大的场景。
- 单机流控:实例的每个节点各自进行流控,高并发场景下实例内部性能损耗最小,单位时间内会存在一定的误差值,适用于并发量更大的场景。
|
策略生效范围 |
- 单个API生效
对单个API进行流量统计和控制。
- API共享生效
对绑定了该策略的所有API进行总流量统计和控制。
|
时长 |
流量限制的时长。
- 与“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流量限制和时长。
单击“添加规则”,可添加多个规则。
例如,在“定义参数”中添加参数“Host”,参数位置选择“Header”;在“定义规则”中添加一条规则,匹配条件设置成“Host = www.abc.com”,API流量限制为10,时长为60s。表示在60s内,对于请求头域中Host参数等于“www.abc.com”的API,且API调用次数达到10,参数流控生效。 |
特殊流控配置 |
特殊流控配置开关。开启后,“基础流控”的用户流量限制/凭据流量限制与“特殊流控”的特殊租户/特殊凭据共同作用时,以特殊流控值为准。 |
特殊租户 |
租户ID为账号ID或项目ID。
- 绑定APP认证的API时,租户ID为项目ID,请参考《API网关API参考》中的“获取项目ID”章节。
- 绑定IAM认证的API时,租户ID为账号ID,不支持细分到IAM用户维度,请参考《API网关API参考》中的“获取账号名和账号ID”章节。
阈值为单位时间内,此租户访问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
}
]
}