更新时间:2024-01-15 GMT+08:00

流量控制插件

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

如果当前实例不支持流量控制插件,请联系技术支持升级实例。

  • 基础流控

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

  • 参数流控

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

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

    对某个应用或租户进行特定的流控。

使用限制

  • 如果一个API绑定流量控制后,继续绑定流量控制插件,流量控制会失效。
  • 参数流控的规则最多可定义100个。
  • 插件内容最大长度65535。

配置参数说明

表1 配置参数说明

参数

配置说明

策略生效范围

  • 单个API生效

    对单个API进行流量统计和控制。

  • API共享生效

    对绑定了该插件的所有API进行总流量统计和控制。

时长

流量限制的时长。

  • 与“API流量限制”配合使用,表示单位时间内的单个API请求次数上限。
  • 与“用户流量限制”配合使用,表示单位时间内的单个用户请求次数上限。
  • 与“应用流量限制”配合使用,表示单位时间内的单个APP请求次数上限。
  • 与“源IP流量限制”配合使用,表示单位时间内的单个IP地址请求次数上限。

API流量限制

单个API被调用次数上限。

与“时长”配合使用,表示单位时间内的单个API请求次数上限。

用户流量限制

单个用户调用API次数上限,如果API认证方式为IAM认证,用户流量根据项目ID来限制;如果API认证方式为APP认证,用户流量根据账号ID来限制账号ID和项目ID请参考下文“特殊租户”配置说明。

  • 不超过“API流量限制”。
  • 与“时长”配合使用,表示单位时间内的单个用户请求次数上限。
  • 如果主账号下有多个子用户访问API,按主账号累计的调用次数进行限制。

应用流量限制

单个应用调用API次数上限,仅适用于API的安全认证方式为APP认证时。

  • 不超过“用户流量限制”。
  • 与“时长”配合使用,表示单位时间内的单个应用请求次数上限。

源IP流量限制

单个IP地址调用API次数上限。

  • 不超过“API流量限制”。
  • 与“时长”配合使用,表示单位时间内的单个IP地址请求次数上限。

参数流控配置

参数流控配置开关。开启后,以参数维度进行流控限制。

定义参数

定义用于规则匹配的参数。

  • 参数位置:用于规则匹配的参数位置。
    • path:API请求的URI,系统默认配置。
    • method:API请求方法,系统默认配置。
    • Header:HTTP头域的第一个值。
    • Query:QueryString的第一个值。
    • 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。

阈值为单位时间内,此租户访问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": "2e421d76dc6c4c75941511ccf654e368",
          "limit": 10
        }
      ]
    },
    {
      "type": "user",
      "policies": [
        {
          "key": "878f1b87f71c40a7a15db0998f358bb9",
          "limit": 10
        }
      ]
    }
  ],
  "parameters": [
    {
      "type": "path",
      "name": "reqPath",
      "value": "reqPath"
    },
    {
      "type": "method",
      "name": "method",
      "value": "method"
    },
    {
      "type": "header",
      "name": "Host",
      "value": "Host"
    }
  ],
  "rules": [
    {
      "match_regex": "[\"Host\",\"==\",\"www.abc.com\"]",
      "rule_name": "rule-jlce",
      "time_unit": "second",
      "interval": 0,
      "limit": 5
    }
  ]
}