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

このドキュメントでは、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