
# 配置API的流量控制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控制台](https://console.huaweicloud.com/roma3)，在左侧导航栏选择"资源管理"，在实例页面单击实例，进入实例控制台。
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：系统参数。    - 参数：用作规则匹配的参数名。                                                                                                                                                                                                                                                                     |
   | 定义规则    | 参数流控策略的匹配规则和流控配置。单击"添加规则"，可添加规则，系统根据从上到下的顺序匹配规则。 - 规则：单击"![](https://support.huaweicloud.com/usermanual-roma/zh-cn_image_0000001340694301.png)"编辑规则条件表达式。若表达式数量大于等于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. 单击"确定"，完成插件策略的创建。
   - 在策略列表中显示已创建的访问控制策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
    
6. 插件策略创建后，您还需要[为API绑定插件策略]，才能使插件策略对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
    }
  ]
}
```
