更新时间:2024-10-09 GMT+08:00

流量控制2.0策略说明

流量控制2.0策略可以限制单位时间内API的被调用次数,支持参数流控、基础流控和基于基础流控的特殊流控。

  • 基础流控

    可以对API、用户、凭据、源IP进行多维度流控,与已有的流量控制策略说明功能一致但不兼容。

  • 参数流控

    支持根据Header、Path、Method、Query以及系统变量中的参数值进行自定义流控。

  • 基于基础流控的特殊流控

    对某个凭据或租户进行特定的流控。

如果此策略在当前实例中不支持,请联系技术支持升级实例到最新版本。

使用限制

  • 已了解前提条件
  • 如果一个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流量限制和时长。

单击“添加规则”,可添加多个规则。

  • 规则

    单击,可添加多个条件表达式,选择“定义参数”中的参数名和判断条件,以及输入参数值。

    • =为等于
    • !=为不等于
    • pattern为正则表达式
    • enum为枚举值,多个参数值之间用英文逗号分隔
  • API流量限制

    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
    }
  ]
}