I/O タイムアウトを構成するためのベスト プラクティス

Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントに移動
情報

クライアント アプリケーションによって行われた API リクエストは、バックエンド サービスに到達する前に、Apigee Edge のさまざまなコンポーネントを通過します。ほとんどのクライアント アプリケーションは、これらのリクエストへのレスポンスがタイムリーに受信されることを想定しています。

タイムリーなレスポンスを実現するために、API リクエストが流れる各コンポーネントに I/O タイムアウト値が設定されています。フロー内のいずれかのコンポーネントが前のコンポーネントよりも時間がかかると、前のコンポーネントがタイムアウトし、504 Gateway Timeout エラーで応答します。

タイムアウトを構成する際は、各コンポーネントで値を慎重に構成する必要があります。そうしないと、 504 Gateway Timeout エラーが発生する可能性があります。

このドキュメントでは、Apigee Edge で API リクエストが転送されるさまざまなコンポーネントで I/O タイムアウトを構成するためのベスト プラクティスについて説明します。

I/O タイムアウトの構成に関するベスト プラクティス

I/O タイムアウトを構成する際は、次のベスト プラクティスを検討してください。

  • 最初のコンポーネント: API リクエスト フローの最初のコンポーネント(Apigee Edge のクライアント アプリケーション)で、常に最も長いタイムアウトを使用します。
  • 最後のコンポーネント: API リクエスト フローの最後のコンポーネント(Apigee Edge のバックエンド サービス)では、常に最小のタイムアウトを使用します。
  • コンポーネント間: フロー内の最初のコンポーネントと最後のコンポーネントの間で、各コンポーネントで構成されたタイムアウト値に 2 ~ 3 秒以上の差があることを確認します。
  • Router: 特定の仮想ホストの I/O タイムアウト値は、Router で構成するのではなく、常に構成(変更)することをおすすめします。これにより、新しいタイムアウト値は、ルータによって処理されるすべての API プロキシではなく、特定の仮想ホストを使用している API プロキシにのみ影響します。

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

  • Message Processor: 特定の API プロキシの I/O タイムアウト値は、Message Processor で構成するのではなく、常に構成(変更)することをおすすめします。これにより、新しいタイムアウト値が、Message Processor によって処理されるすべての API プロキシではなく、特定の 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 の間に 1 つの中間コンポーネントがあり、Apigee Edge とバックエンド サーバーの間に 1 つの中間コンポーネントがある Apigee の設定例

クライアントから中間コンポーネント 1、ルーター、Message Processor、中間コンポーネント 2、バックエンド サーバーの順に流れるフロー

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

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

    クライアント、中間コンポーネント 1、ルーター、Message Processor、中間コンポーネント 2、バックエンド サーバーでタイムアウトを構成する

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

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