ネットワーク レイテンシのベスト プラクティス

このドキュメントでは、Cloud Healthcare API の使用に関するベスト プラクティスを示します。このページのガイドラインの目的は、効率と精度を向上させることと、サービスからのレスポンス時間を最適化することです。

レイテンシのパフォーマンスを理解する

Cloud Healthcare API のパフォーマンスは、以下の間のレイテンシで測定されます。

  1. Cloud Healthcare API にリクエストを送信したとき。
  2. リクエストへの完全なレスポンスを受け取ったとき

レイテンシは次の 3 つのコンポーネントで構成されます。

  • ラウンドトリップ時間(RTT)
  • サーバー処理のレイテンシ
  • サーバー スループット

リクエストの送信先のサーバーまでの地理的距離は、RTT とサーバー スループットに大きな影響を与える可能性があります。Google Cloud ネットワークのリージョン間のレイテンシとスループットの測定値は、ライブ ダッシュボードで確認できます。このダッシュボードには、Cloud Healthcare API サーバーにリクエストを行ったときに、クライアントが想定できるさまざまな場所からのパフォーマンスが表示されます。

レイテンシ パフォーマンスの測定

以下のツールとダッシュボードは、Cloud Healthcare API サーバーとのリクエストのパフォーマンスを測定する方法として活用できます。

  • Google Cloud Console のレイテンシ指標: Google Cloud コンソールで Cloud Healthcare API リクエストのサーバー側レイテンシを確認できます。詳しくは Google Cloud SKU をご覧ください。

  • Cloud Logging のカスタム指標: Logging を使用して分布指標を作成できます。分散指標を使用すると、アプリケーションのエンドツーエンドのレイテンシを構成して把握できます。また、カスタム定義のレイテンシ測定値をモニタリングして報告することもできます。

  • Chrome ネットワーク パネル: Chrome DevTools でネットワーク アクティビティを検査して、ブラウザから送信された HTTP リクエストのパフォーマンスの詳細を確認できます。

リクエスト レイテンシの削減

このセクションでは、Cloud Healthcare API に送信されるリクエストのレイテンシを短縮するためのさまざまな方法について説明します。

最も近いリージョンのロケーションへのリクエストの送信

最適な RTT とサーバー スループット パフォーマンスを得るには、最も近い Cloud Healthcare API リージョン ロケーションにクライアントからリクエストを送信します。使用可能なリージョンの一覧については、リージョンをご覧ください。

ウォームアップ リクエストの送信

クライアントがセッション中に初めて Cloud Healthcare API サーバーにリクエストを送信すると、クライアントはサーバーと TCP handshake を実行して、HTTP リクエストの接続を確立します。後続のリクエストでは引き続き、確立された接続を使用できるため、クライアントは一般的にリクエストに関連する TCP オーバーヘッドを回避できます。これにより、リクエスト送信時のパフォーマンスが向上します。

HTTP/1.1 または HTTP/2 と同時のリクエストの送信

一連のリクエストで最適なパフォーマンスを得るには、リクエストを同時に送信します。同時リクエストを送信する際は、次のガイドラインに従ってください。

  • 同時リクエストを送信する場合は、同時リクエスト数の理想的な数を確認してください。最適な数は、ハードウェアとネットワークの機能、送信されるリクエストの数など、さまざまな要因によって異なります。テストを実施して、最適な数を見つけます。
  • 可能な限り、HTTP/2 を使用してクライアントからリクエストを送信します。HTTP/2 では、複数のリクエストを順次または同時に送信する際に必要な TCP 接続が 1 つで良いため、HTTP/1.1 よりもパフォーマンスが向上します。その結果、TCP handshake のオーバーヘッドを回避できます。
  • HTTP/2 を使用できない場合は、永続的な接続で HTTP/1.1 を使用します。ウォームアップ リクエストがすでに送信済みの場合は、TCP handshake のオーバーヘッドを回避できます。永続的な接続を使用する場合は、HTTP ライブラリの接続プールを使用して最適化された接続を管理する必要があります。

    たとえば、Java 用 Google HTTP クライアント ライブラリを使用して 20 個の同時リクエストを含む接続プールを設定するには、コードに次の内容を含めます。

    PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
    // Support 20 concurrent requests.
    cm.setDefaultMaxPerRoute(20);
    cm.setMaxTotal(100);
    HTTP_CLIENT = HttpClients.custom().setConnectionManager(cm).build();
    

    Node.js を使用して 20 個の同時リクエストを含む接続プールを設定するには、コードに次の内容を含めます。

    require('http').globalAgent.maxSockets = 20