使用插件

您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
info

Edge Microgateway v. 3.1.x

受众群体

本主题面向希望使用随 Microgateway 一起安装的现有插件的 Edge Microgateway 运算符。它还详细讨论了 Spike Arrest 和配额插件(两者都包含在安装中) 。如果您是想要开发新 插件的开发者,请参阅开发 自定义插件

什么是 Edge Microgateway 插件?

插件是一个 Node.js 模块,可为 Edge Microgateway 添加功能。插件模块 遵循一致的模式,并存储在 Edge Microgateway 已知的位置,使 Microgateway 能够自动发现和加载它们。Edge Microgateway 包含多个现有 插件,您还可以创建自定义插件,如开发自定义插件中所述。

与 Edge Microgateway 捆绑的现有插件

Edge Microgateway 在安装时提供了多个现有插件。其中 包括:

插件 默认处于启用状态 说明
analytics 将分析数据从 Edge Microgateway 发送到 Apigee Edge。
oauth 向 Edge Microgateway 添加 OAuth 令牌和 API 密钥验证。请参阅 设置 和配置 Edge Microgateway
quota 对发送到 Edge Microgateway 的请求强制执行配额。使用 Apigee Edge 存储和管理 配额。请参阅使用配额插件
spikearrest 防范流量高峰和 DoS 攻击。请参阅使用 Spike Arrest 插件
header-uppercase 一个注释的示例代理,旨在作为指南帮助开发者编写自定义插件。 请参阅 Edge Microgateway 示例插件
accumulate-request 在将数据传递给插件链中的下一个 处理程序之前,将请求数据累积到单个对象中。适用于编写需要对单个累积的请求内容对象进行操作的转换插件。
accumulate-response 在将数据传递给插件链中的下一个 处理程序之前,将响应数据累积到单个对象中。适用于编写需要对单个累积的响应内容对象进行操作的转换插件。
transform-uppercase 转换请求或响应数据。此插件代表了转换插件的最佳实践 实现。示例插件执行简单的转换 (将请求或响应数据转换为大写);不过,它可以轻松适应执行其他类型的转换,例如 XML 到 JSON。
json2xml 根据 accept 或 content-type 标头转换请求或响应数据。如需了解 详情,请参阅 GitHub 中的插件文档
quota-memory 对发送到 Edge Microgateway 的请求强制执行配额。在本地内存中存储和管理配额。
healthcheck 返回有关 Edge Microgateway 进程的信息(内存用量、CPU 用量 等)。如需使用该插件,请在 Edge Microgateway 实例上调用网址 /healthcheck。此插件旨在作为示例,供您用于 实现自己的健康检查插件。

在哪里可以找到现有插件

与 Edge Microgateway 捆绑的现有插件位于此处,其中 [prefix]npm 前缀目录。如果您找不到此目录,请参阅 Edge Microgateway 安装在哪里

[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins

添加和配置插件

按照以下模式添加和配置插件:

  1. 停止 Edge Microgateway。
  2. 打开 Edge Microgateway 配置文件。如需了解详情,请参阅 更改配置选项。
  3. 将插件添加到配置文件的 plugins:sequence 元素,如下所示。 插件按照它们在此列表中出现的顺序执行。
edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
     level: info
     dir: /var/tmp
     stats_log_interval: 60
  plugins:
     dir: ../plugins
     sequence:   
     - oauth
     - plugin-name
  1. 配置插件。某些插件具有可选参数,您可以在配置文件中配置这些参数。 例如,您可以添加以下节来配置 Spike Arrest 插件。如需了解详情,请参阅使用 Spike Arrest 插件
    edgemicro:
      home: ../gateway
      port: 8000
      max_connections: -1
      max_connections_hard: -1
      logging:
        level: info
        dir: /var/tmp
        stats_log_interval: 60
      plugins:
        dir: ../plugins
        sequence:
          - oauth
          - spikearrest
    spikearrest:
       timeUnit: minute
       allow: 10
  1. 保存文件。
  2. 根据您修改的配置文件,重启或重新加载 Edge Microgateway。

特定于插件的配置

您可以通过在此目录中创建 特定于插件的配置来替换配置文件中指定的插件参数:

[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins/config

其中 [prefix]npm 前缀目录。如果您找不到此目录,请参阅 Edge Microgateway 安装在哪里

plugins/<plugin_name>/config/default.yaml。例如,您可以将此 代码块放在 plugins/spikearrest/config/default.yaml 中,它们将替换任何其他 配置设置。

spikearrest:
   timeUnit: hour   
   allow: 10000   
   buffersize: 0

使用 Spike Arrest 插件

Spike Arrest 插件可防范流量高峰。它会限制 Edge Microgateway 实例处理的请求数 。

添加 Spike Arrest 插件

请参阅添加和配置插件

Spike Arrest 的示例配置

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - spikearrest
spikearrest:
   timeUnit: minute
   allow: 10
   bufferSize: 5

Spike Arrest 的配置选项

  • timeUnit:Spike Arrest 执行窗口重置的频率。有效值为 second 或 minute。
  • allow:在 timeUnit 期间允许的最大请求数。另请参阅如果您运行多个 Edge Micro 进程
  • bufferSize:(可选,默认值 = 0)如果 bufferSize > 0,Spike Arrest 会将此数量的请求存储在缓冲区中。一旦出现下一个执行“窗口”,系统将首先处理缓冲的请求。另请参阅添加 缓冲区

Spike Arrest 的工作原理是什么?

您可以将 Spike Arrest 视为一种用于避免流量高峰的方法,而不是将流量限制为特定请求数的方法。您的 API 和后端可以处理一定量的流量,而 Spike Arrest 政策帮助您将流量平滑地保持在您所需的常规量。

运行时 Spike Arrest 行为与您期望输入的字面量 每分钟或每秒值产生的行为有所不同。

例如,假设您指定每分钟 30 个请求的速率,如下所示:

spikearrest:
   timeUnit: minute
   allow: 30

在测试中,您可能会认为只要请求在 一分钟内发出,就可以在 1 秒内发送 30 个请求。但该政策并非以这种方式强制执行设置。仔细想想,在某些环境中,1 秒内发出 30 个请求可以被视为一次小高峰。

那么,然后会怎么样呢?为防止出现类似高峰的行为,Spike Arrest 会将您的设置划分为若干更小的时间间隔,从而平滑发送允许的 流量,如下所示:

每分钟速率

每分钟速率可以以秒为时间间隔,平滑发送允许的请求。例如,每分钟 30 个请求会按以下所示实现平滑发送:

60 秒(1 分钟)/30 = 间隔时间为 2 秒,或大约每 2 秒允许 1 个请求。2 秒内发出的 第二个请求将会失败。此外,在一分钟内发出的第 31 个请求将会失败。

每秒速率

每秒速率会以毫秒为时间间隔,平滑发送允许的请求。例如, 每秒 10 个请求会按以下所示实现平滑发送:

1000 毫秒(1 秒钟)/10 = 间隔时间为 100 毫秒,或大约每 100 毫秒允许 1 个请求 。100 毫秒内发出的第二个请求将会失败。此外,在一秒内发出的第 11 个请求将会失败。

超出限制时

如果在指定的时间间隔内请求数超出限制,Spike Arrest 会返回此错误消息,并显示 HTTP 503 状态:

{"error": "spike arrest policy violated"}

添加缓冲区

您可以选择向政策添加缓冲区。假设您将缓冲区设置为 10。 您会发现,当您超出 Spike Arrest 限制时,API 不会立即返回错误。相反,请求会被缓冲(最多为指定数量),并且缓冲的请求会在 下一个适当的执行窗口可用时立即处理。默认 bufferSize 为 0。

如果您运行多个 Edge Micro 进程

允许的请求数取决于正在运行的 Edge Micro 工作器进程数。 Spike Arrest 会计算每个工作器进程允许的请求数。默认情况下, Edge Micro 进程数等于安装 Edge Micro 的机器上的 CPU 数。不过,您可以在启动 Edge Micro 时使用 --processes 选项在 start 命令上配置工作器进程数。例如,如果您 希望 Spike Arrest 在给定时间段内达到 100 个请求时触发,并且如果您使用 --processes 4 选项启动 Edge Microgateway,然后在 Spike Arrest 配置中设置 allow: 25。总而言之,经验法则是将 allow config 参数设置为“所需的 Spike Arrest 计数 / 进程数”的值。

使用配额插件

配额指定应用在一个小时、一天、一周或一个月内允许提交到 API 的请求消息的数量。当应用达到配额限制时,后续 API 调用将被拒绝。另请参阅 Spike Arrest 和配额之间有什么区别?。

添加配额插件

请参阅添加和配置插件

Apigee Edge 中的产品配置

您可以在 Apigee Edge 界面中配置配额,您可以在其中配置 API 产品。您需要知道 哪个产品包含您想要使用配额限制的 Microgateway 感知代理。此产品必须添加到开发者应用。当您使用开发者应用中的密钥进行身份验证的 API 调用时,配额将应用于这些 API 调用。

  1. 登录您的 Apigee Edge 组织账号。
  2. 在 Edge 界面中,打开与您要应用配额的 Microgateway 感知代理关联的产品。 您要应用配额。
    1. 在界面中,从“发布”菜单中选择产品
    2. 打开包含您要应用配额的 API 的产品。
    3. 点击修改
    4. 在“配额”字段中,指定配额间隔。例如,每 分钟 100 个请求。或每 2 小时 50000 个请求。

  1. 点击保存
  2. 确保该产品已添加到开发者应用。您需要使用此应用中的密钥才能发出 经过身份验证的 API 调用。

配额的示例配置

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - quota

配额的配置选项

如需配置配额插件,请将 quotas 元素添加到配置文件, 如以下示例所示:

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - quota
  quotas:
    bufferSize:
      hour: 20000
      minute: 500
      month: 1
      default: 10000
    useDebugMpId: true
    failOpen: true
...
选项 说明
buffersize (整数)为指定的时间间隔设置的缓冲区大小。允许的时间 单位包括:hourminutedayweekmonthdefault
failOpen 启用此功能后,如果发生配额处理错误 或发送到 Edge 的“应用配额”请求未能更新远程配额计数器,则系统将仅根据本地计数处理配额 ,直到下一次成功同步远程配额 。在这两种情况下,系统都会在请求对象中设置 quota-failed-open 标志。

如需启用配额“失败打开”功能,请设置以下配置:

edgemicro:
  ...
  quotas:
    failOpen: true
...
useDebugMpId 将此标志设置为 true,以启用在配额响应中记录 MP (消息处理器)ID 。

如需使用此功能,您必须设置以下配置:

edgemicro:
  ...
  quotas:
    useDebugMpId: true
  ...

设置 useDebugMpId 后,来自 Edge 的配额响应将包含 MP ID 并且 Edge Microgateway 会记录这些响应。例如:

{
    "allowed": 20,
    "used": 3,
    "exceeded": 0,
    "available": 17,
    "expiryTime": 1570748640000,
    "timestamp": 1570748580323,
    "debugMpId": "6a12dd72-5c8a-4d39-b51d-2c64f953de6a"
}
useRedis 如果设置为 true,该插件将使用 Redis 作为配额后备存储。 如需了解详情,请参阅使用 Redis 后备存储来存储配额

使用 Redis 后备存储来存储配额

如需使用 Redis 后备存储来存储配额,请使用与 Synchronizer 功能相同的配置。以下是使用 Redis 存储配额所需的基本配置:

edgemicro:
  redisHost: localhost
  redisPort: 6379
  redisDb: 2
  redisPassword: codemaster

quotas:
  useRedis: true
如需详细了解 edgemicro.redis* 参数,请参阅使用同步器

测试配额插件

超出配额时,系统会向客户端返回 HTTP 403 状态,并显示以下 消息:

{"error": "exceeded quota"}

Spike Arrest 和配额之间有什么区别?

为手头的工作选择合适的工具非常重要。配额政策配置 允许客户端应用在一个小时、一日、一周或一个月内提交给 API 的请求消息的数量。配额政策通过 维护分布式计数器计算传入请求,从而对客户端应用强制执行使用限制。

使用配额政策可以强制执行与开发者和合作伙伴签署的业务合同或服务等级协议 (SLA),而不是 运营流量管理。例如,配额可用于限制 免费服务的流量,同时允许付费客户完全访问。

使用 Spike Arrest 可防止 API 流量突然激增。通常,Spike Arrest 用于阻止可能的 DDoS 或其他恶意攻击。