設定 I/O 逾時的最佳做法

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

用戶端應用程式發出的 API 要求會先經過 Apigee Edge 中的各種元件,再送達後端服務。大多數用戶端應用程式都會預期系統及時收到這些要求的回應。

為了能及時回應,API 要求通過的每個元件中都有 I/O 逾時值設定。如果流程中有任何元件所需的時間超過上述元件,上述元件會逾時,並傳回 504 Gateway Timeout 錯誤

設定逾時時,請務必謹慎地在每個元件中設定值,否則可能導致 504 閘道逾時錯誤

本文件說明在 Apigee Edge 中,透過 API 要求流程,為各種元件設定 I/O 逾時的最佳做法。

設定 I/O 逾時的最佳做法

設定 I/O 逾時時,請考慮採用下列最佳做法:

  • 第一個元件:一律在 API 要求流程 (即 Apigee Edge 中的用戶端應用程式) 中的第一個元件使用最長的逾時時間。
  • 最後一個元件:一律在 API 要求流程中的最後一個元件使用最低逾時時間,也就是 Apigee Edge 中的後端服務。
  • 元件之間:確保每個元件中第一個元件和流程中的最後一個元件之間的逾時值至少有 2 至 3 秒。
  • 路由器:建議您針對特定虛擬主機設定 (修改) I/O 逾時值,而不是在路由器上進行設定。這麼做可確保新的逾時值只會影響使用特定虛擬主機的 API Proxy,而不會影響路由器提供的所有 API Proxy。

    請僅在您確定需要新的 I/O 逾時值,或適用於路由器上執行的所有 API Proxy 時,才設定 (修改) 路由器上的 I/O 逾時值。

  • 訊息處理器:建議您設定 (修改) 特定 API Proxy 的 I/O 逾時值,而不是在訊息處理器上進行設定。這麼做可確保新的逾時值只會影響特定 API Proxy,而不會影響訊息處理器提供的所有 API Proxy。

    請僅在您確定為訊息處理器執行所有 API Proxy 時,才設定 (修改) 訊息處理器的 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. 用戶端應用程式是流程中的第一個元件。應在用戶端設定最高 timeout 值。
  2. 後端伺服器是流程中的最後一個元件。您應在後端伺服器上設定最低 timeout 值。
  3. 請按照以下順序設定每個元件 (包括中繼元件) 的逾時值:

    在用戶端設定逾時,然後依序為元件 1、路由器、訊息處理器、中繼元件 2 和後端伺服器

    以下範例說明根據上述指南,針對不同元件設定的逾時值,以避免發生問題:

    在用戶端設定 63 秒時逾時,接著在 60 秒時設定中級元件 1,接著在 57 秒時執行路由器,再於 55 秒內執行路由器 2,接著在 52 秒時設定中繼元件 2,接著在 59 秒時執行後端伺服器