使用插件

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

Edge Microgateway v. 2.3.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 前缀目录。 请参阅 Where 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 前缀目录。 请参阅 Where Edge Microgateway 安装在哪里。

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

spikearrest:
   timeUnit: hour   
   allow: 10000   
   buffersize: 0

使用 Spike Arrest 插件

本部分讨论了 Spike Arrest 插件。

Spike Arrest 简介

Spike Arrest 可防范流量高峰。它会限制 Edge Microgateway 实例处理的请求数。如需了解详情,请参阅 Spike Arrest 的工作原理。另请参阅 Spike Arrest 和配额之间的区别?。

添加 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 期间允许的最大请求数。
  • 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 Alert 会返回此错误消息,并显示 HTTP 503 状态:

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

添加缓冲区

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

使用配额插件

本部分讨论了配额插件。

配额插件简介

配额指定应用在一个小时、一天、一周或一个月内允许提交到 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

配额的配置选项

配额插件没有其他配置选项。

测试配额插件

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

{"error": "exceeded quota"}

Spike Arrest 和配额之间的区别

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

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

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