配置 I/O 超时的最佳做法

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档
信息

客户端应用发出的 API 请求在到达后端服务之前,会流经 Apigee Edge 中的各种组件。大多数客户端应用都希望及时收到这些请求的响应。

为了及时响应,我们在 API 请求流经的每个组件中设置了 I/O 超时值。如果流程中的任何组件所用的时间超过了前面的组件,前面的组件就会超时,并返回 504 网关超时错误

在配置超时时,应非常谨慎地在每个组件中配置值,否则可能会导致 504 网关超时错误

本文档介绍了在 Apigee Edge 中通过各种组件配置 I/O 超时的最佳实践,API 请求会通过这些组件流动。

配置 I/O 超时的最佳实践

配置 I/O 超时时,请考虑以下最佳实践:

  • 第一个组件:始终在 API 请求流程中的第一个组件(即 Apigee Edge 中的客户端应用)上使用最长的超时时间。
  • 最后一个组件:始终在 API 请求流程的最后一个组件(即 Apigee Edge 中的后端服务)上使用最低的超时时间。
  • 组件之间:确保流程中第一个组件与最后一个组件之间,每个组件中配置的超时值至少相差 2-3 秒。
  • 路由器:最好始终为特定虚拟主机配置(修改)I/O 超时值,而不是在路由器上配置。这样可确保新的超时值仅影响使用特定虚拟主机的 API 代理,而不影响路由器所服务的所有 API 代理。

    仅当您完全确定新的 I/O 超时值是必需的,或者适用于在路由器上运行的所有 API 代理时,才在路由器上配置(修改)I/O 超时。

  • 消息处理器:比较好的做法是为特定 API 代理配置(修改)I/O 超时值,而不是在消息处理器上配置该值。这样可确保新的超时值仅影响特定的 API 代理,而不会影响消息处理器所服务的所有 API 代理。

    只有在您完全确定新 I/O 超时值是必需的,或者适用于在消息处理器上运行的所有 API 代理时,才在消息处理器上配置(修改)I/O 超时。

场景示例

本部分中的场景可帮助您了解如何正确设置 I/O 超时值。

场景 1:客户端应用直接向 Apigee Edge 发送请求

本部分介绍了在 Apigee Edge 设置中设置超时值的最佳实践,其中客户端应用与 Apigee Edge 之间以及 Apigee Edge 与后端服务器之间没有中间组件。

不含中间组件的 Apigee 设置示例

从客户端开始,流向路由器,然后流向消息处理器,最后流向后端服务器

如果 Apigee Edge 的设置如上图所示,没有中间组件,请遵循以下最佳实践:

  1. 客户端应用是流程中的第一个组件。应在客户端上设置最长超时值。
  2. 后端服务器是流程中的最后一个组件。应在后端服务器上设置最低超时值。
  3. 按以下顺序配置每个组件的超时值:

    在客户端、路由器、消息处理器和后端服务器上配置超时

    以下示例展示了根据上述准则为各个组件设置的超时值,以避免出现任何问题:

    将客户端的超时时间配置为 60 秒,然后将路由器的超时时间配置为 57 秒,再将消息处理器的超时时间配置为 55 秒,最后将后端服务器的超时时间配置为 52 秒

场景 2:客户端应用通过中间组件向 Apigee Edge 发出的请求

本部分介绍在 Apigee Edge 设置中设置超时值的最佳实践,其中客户端应用与 Apigee Edge 之间以及 Apigee Edge 与后端服务器之间存在一个或多个中间组件。

中间组件可以是负载平衡器、内容分发网络 (CDN)、NGINX 等。

Apigee 设置示例:客户端与 Apigee Edge 之间以及 Apigee Edge 与后端服务器之间各有一个中间组件

从客户端开始,依次流向中间组件 1、路由器、消息处理器、中间组件 2 和后端服务器的流程

如果 Apigee Edge 的设置如上图所示,包含一个或多个中间组件,请遵循以下最佳实践:

  1. 客户端应用是流程中的第一个组件。应在客户端上设置最高 超时值。
  2. 后端服务器是流程中的最后一个组件。应在后端服务器上设置最低 超时值。
  3. 按以下顺序配置每个组件(包括中间组件)的超时值:

    在客户端、中间组件 1、路由器、消息处理器、中间组件 2 和后端服务器上配置超时

    以下示例展示了根据上述准则为各个组件设置的超时值,以避免出现任何问题:

    将客户端的超时时间配置为 63 秒,然后将中间组件 1 的超时时间配置为 60 秒,然后将路由器的超时时间配置为 57 秒,然后将消息处理器的超时时间配置为 55 秒,然后将中间组件 2 的超时时间配置为 52 秒,然后将后端服务器的超时时间配置为 59 秒