更新时间:2024-09-03 GMT+08:00
分享

配置流量控制2.0策略

ROMA Connect支持通过插件策略的方式,为API提供灵活的扩展能力。流量控制2.0策略可限制单位时间内API的被调用次数,保护后端服务。

插件策略和API本身相互独立,只有为API绑定插件策略后,插件策略才对API生效。为API绑定插件策略时需指定发布环境,插件策略只对指定环境上的API生效。

约束与限制

  • 同一个API在同一个环境中只能绑定一个相同类型的插件策略,已被API绑定的插件策略无法删除。
  • 若API绑定了流量控制策略的同时,也绑定了流量控制2.0策略,则流量控制策略会失效,以绑定的流量控制2.0策略为准。

创建流量控制2.0策略

  1. 登录ROMA Connect控制台,在“实例”页面单击实例上的“查看控制台”,进入实例控制台。
  2. 在左侧的导航栏选择“服务集成 APIC > API策略”,在“策略管理”页签下单击“创建策略”。
  3. 在选择策略类型弹窗中选择“插件策略 > 流量控制2.0”。
  4. 在配置策略弹窗中配置插件策略信息。
    表1 策略配置

    参数

    说明

    策略名称

    填写策略的名称,根据规划自定义。建议您按照一定的命名规则填写策略名称,方便您快速识别和查找。

    策略类型

    固定为“流量控制2.0”。

    可见范围

    选择策略的可见范围。

    • 集成应用:策略归属某个集成应用,仅拥有该集成应用权限的用户可查看和使用该策略。
    • 全局:当前实例的所有用户都可查看和使用该策略。

    集成应用

    仅当“可见范围”选择“集成应用”时需要配置。

    选择策略所属的集成应用。若没有可用的集成应用,可单击右侧的“新建集成应用”,创建一个集成应用。

    描述

    填写策略的描述信息。

    策略内容:支持表单模式和脚本模式两种方式,脚本模式配置请参见脚本配置示例

    流控类型

    选择流控的类型,推荐使用高性能流控。

    • 高精度流控:单位时间内流控没有误差,但高并发场景下实例内部有一定的性能损耗,适用于并发量较小的场景。
    • 高性能流控:单位时间内流控偶现较小误差,但高并发场景下实例内部性能损耗较小,适用于并发量较大的场景。
    • 单机流控:单位时间内流控存在一定误差值,但高并发场景下实例内部性能损耗最小,适用于并发量更大的场景。

    策略基本信息

    策略生效范围

    选择策略的生效范围。

    • 单个API生效:绑定到当前策略的API各自计算流控。
    • API共享生效:绑定到当前策略的所有API共同计算流控。

    时长

    填写流量控制的统计时长,单位可选择“秒”、“分钟”、“小时”和“天”,需与基础流控参数配合使用。

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

    基础流控

    API流量限制

    填写API被调用的次数上限,与“时长”配合使用。

    用户流量限制

    填写单个用户调用API的次数上限,与“时长”配合使用。参数值不能大于“API流量限制”的值。

    凭据流量限制

    填写单个凭据调用API的次数上限,与“时长”配合使用。参数值不能大于“API流量限制”的值。

    源IP流量限制

    填写单个IP地址调用API的次数上限,与“时长”配合使用。参数值不能大于“API流量限制”的值。

    参数流控配置

    参数流控配置开关。开启后可自定义参数流控策略,API请求优先匹配参数流控策略中的规则和流控,仅当未匹配到参数流控策略时才执行上方配置的基础流控策略。

    • 若匹配到参数流控策略,则执行策略内配置的流控。
    • 若未匹配到参数流控策略,则执行上方配置的基础流控。

    定义参数

    定义用于规则匹配的参数。单击“添加参数”,添加用于匹配规则的参数。

    • 参数位置:参数在API请求中的位置。
      • path:API请求的URI,已默认配置。
      • method:API请求方法,已默认配置。
      • header:API请求Header参数的第一个值。
        说明:

        建议不要设置敏感信息,防止泄露。

      • query:API请求Query参数的第一个值。
      • system:系统参数。
    • 参数:用作规则匹配的参数名。

    定义规则

    参数流控策略的匹配规则和流控配置。单击“添加规则”,可添加规则,系统根据从上到下的顺序匹配规则。

    • 规则:单击“”编辑规则条件表达式。若表达式数量大于等于3个,可通过“转子层级”对表达式进行分层设置。
      • =:等于
      • !=:不等于
      • pattern:正则表达式
      • enum:枚举值,多个参数值之间用英文逗号分隔
    • API流量限制:填写API被调用的次数上限,与“时长”配合使用。
    • 时长:填写流量控制的统计时长,单位可选择“秒”、“分钟”、“小时”和“天”,与“API流量限制”配合使用。

    例如,在“定义参数”中添加参数“Host”,参数位置选择“header”;在“定义规则”中添加一条规则,匹配条件设置成“host = www.abc.com”,API流量限制为10,时长为60s。对于请求头域中host参数等于“www.abc.com”的API请求,当60s内API的调用次数达到10,参数流控生效。

    特殊流控配置

    特殊流控配置开关。开启后可对租户或集成应用进行流量控制。

    若基础流控中的“用户流量限制”或“凭据流量限制”与特殊流控配置中的“特殊租户”或“特殊应用”共同作用时,以特殊流控配置为准。

    特殊租户

    对指定的租户进行流量控制。单击“添加参数”,添加要流控的租户配置。

    • 租户ID:填写要绑定该流控策略的租户ID。
      • 使用APP认证方式调用API时,租户ID为使用的集成应用所属用户的项目ID。
      • 使用IAM认证方式调用API时,租户ID为调用者的账号ID。

      您可以单击控制台右上角的用户名,选择“我的凭证”,在我的凭证页面获取用户的项目ID和账号ID。

    • 阈值:填写单位时间内,该租户调用API的次数上限。参数值不能大于基础流控中的“API流量限制”值。

    特殊应用

    对指定的集成应用进行流量控制。单击“添加参数”,添加要流控的集成应用配置。

    • 选择应用:选择要进行流控的集成应用。
    • 阈值:填写单位时间内,该集成应用调用API的次数上限。参数值不能大于基础流控中的“API流量限制”值。
  5. 单击“确定”,完成插件策略的创建。

    插件策略创建后,您还需要为API绑定插件策略,才能使插件策略对API生效。

为API绑定插件策略

  1. 在“策略管理”页签右上角的过滤条件中选择“流量控制2.0”。
  2. 在页面中单击策略的名称,进入策略详情页面。
  3. 在“关联API”下选择要绑定API的环境,然后单击“绑定API”。
  4. 在绑定API弹窗中,勾选要绑定策略的API。

    您可以通过指定API分组和API名称,筛选所需API。

  5. 单击“确定”,完成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
    }
  ]
}

相关文档