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 秒以上の差異があることを確認します。
  • Router: I/O タイムアウト値は、Router で構成するのではなく、特定の仮想ホストに対して構成(変更)することをおすすめします。これにより、新しいタイムアウト値は、特定の仮想ホストを使用している API プロキシにのみ影響し、Router によって提供されるすべての API プロキシには影響しなくなります。

    新しい I/O タイムアウト値が必須である、または Router で実行されているすべての API プロキシに適用されることが確実な場合にのみ、Router の I/O タイムアウトを構成(変更)してください。

  • Message Processor: Message Processor で I/O タイムアウト値を構成するのではなく、特定の API プロキシの I/O タイムアウト値を構成(変更)することをおすすめします。これにより、新しいタイムアウト値が特定の API プロキシにのみ影響し、Message Processor によって提供されるすべての API プロキシに影響しないようになります。

    Message Processor の I/O タイムアウトを構成(変更)するのは、新しい I/O タイムアウト値が必須である、または Message Processor で実行されているすべての API プロキシに適用できることが確実な場合のみにしてください。

シナリオ例

このセクションのシナリオは、I/O タイムアウト値を正しく設定する方法を理解するのに役立ちます。

シナリオ 1: クライアント アプリケーションから直接 Apigee Edge へのリクエスト

このセクションでは、クライアント アプリケーションと Apigee Edge の間および Apigee Edge とバックエンド サーバーの間に中間コンポーネントがない Apigee Edge 設定でタイムアウト値を設定する際のベスト プラクティスについて説明します。

中間コンポーネントを含まない Apigee の設定の例

クライアントから開始して Router、Message Processor を通過し、さらにバックエンド サーバーに到達するフロー

Apigee Edge が上の図のように設定されており、中間コンポーネントがない場合は、次のベスト プラクティスに従ってください。

  1. クライアント アプリケーションは、このフローの最初のコンポーネントです。クライアントには最長のタイムアウト値を設定する必要があります。
  2. バックエンド サーバーは、フローの最後のコンポーネントです。バックエンド サーバーで最低タイムアウトの値を設定する必要があります。
  3. 各コンポーネントのタイムアウト値を次の順序で構成します。

    クライアントでタイムアウトを構成します。次に Router、Message Processor、バックエンド サーバーの順に設定します

    次の例は、問題を回避するために、上記のガイドラインに従ってさまざまなコンポーネントに設定されるタイムアウト値を示しています。

    クライアントのタイムアウトを 60 秒、Router を 57 秒、Message Processor を 55 秒、バックエンド サーバーで 52 秒を構成します

シナリオ 2: クライアント アプリケーションから中間コンポーネントを介した Apigee Edge へのリクエスト

このセクションでは、クライアント アプリケーションと Apigee Edge の間、および Apigee Edge とバックエンド サーバーの間に 1 つ以上の中間コンポーネントがある Apigee Edge 設定でタイムアウト値を設定する際のベスト プラクティスについて説明します。

中間コンポーネントは、ロードバランサ、コンテンツ配信ネットワーク(CDN)、NGINX などです。

クライアントと Apigee Edge の間および Apigee Edge とバックエンド サーバーの間に 1 つの中間コンポーネントを含む Apigee の設定例

クライアントから始まり、中間コンポーネント 1、Router、Message Processor、中間コンポーネント 2、バックエンド サーバーというフロー

1 つ以上の中間コンポーネントを使用して、上の図のように Apigee Edge が設定されている場合は、次のベスト プラクティスに従ってください。

  1. クライアント アプリケーションは、このフローの最初のコンポーネントです。クライアントには最大 timeout 値を設定する必要があります。
  2. バックエンド サーバーは、フローの最後のコンポーネントです。バックエンド サーバーには、最小の timeout 値を設定する必要があります。
  3. 中間コンポーネントを含む各コンポーネントのタイムアウト値を次の順序で構成します。

    クライアントでタイムアウトを構成し、次に中間コンポーネント 1、Router、Message Processor、中間コンポーネント 2、バックエンド サーバーの順に構成します。

    次の例は、問題を回避するために、上記のガイドラインに従ってさまざまなコンポーネントに設定されるタイムアウト値を示しています。

    クライアントのタイムアウトを 63 秒、中間コンポーネント 1 を 60 秒、Router を 57 秒、Message Processor st 55 秒、中間コンポーネント 2 を 52 秒、バックエンド サーバーに 59 秒を構成します