このドキュメントでは、Cloud Healthcare API の使用に関するベスト プラクティスについて説明します。このページのガイドラインの目的は、効率と精度を向上させることと、サービスからのレスポンス時間を最適化することです。
レイテンシのパフォーマンスを理解する
Cloud Healthcare API のパフォーマンスは、以下の間のレイテンシで測定されます。
- Cloud Healthcare API にリクエストを送信したとき。
- リクエストに対する完全なレスポンスが届いたとき。
レイテンシは次の 3 つのコンポーネントで構成されます。
- ラウンドトリップ時間(RTT)
- サーバー処理のレイテンシ
- サーバー スループット
リクエストの送信先のサーバーまでの地理的距離は、RTT とサーバー スループットに大きな影響を与える可能性があります。ネットワークのリージョン間のレイテンシとスループットの測定値は、ライブ ダッシュボードで確認できます。 Google Cloud このダッシュボードには、Cloud Healthcare API サーバーにリクエストを行ったときに、クライアントが想定できるさまざまな場所からのパフォーマンスが表示されます。
レイテンシ パフォーマンスの測定
以下のツールとダッシュボードは、Cloud Healthcare API サーバーとのリクエストのパフォーマンスを測定する方法として活用できます。
Google Cloud コンソールのレイテンシ指標: Google Cloud コンソールで Cloud Healthcare API リクエストのサーバー側レイテンシを確認できます。詳細については、Google Cloud 指標をご覧ください。
Cloud Logging カスタム指標: Logging を使用して分布指標を作成できます。分散指標を使用すると、アプリケーションのエンドツーエンドのレイテンシを構成して把握できます。カスタム定義のレイテンシ測定値をモニタリングしてレポートすることもできます。
Chrome ネットワーク パネル: Chrome DevTools でネットワーク アクティビティを検査して、ブラウザから送信された HTTP リクエストのパフォーマンスの詳細を確認できます。
リクエスト レイテンシの削減
このセクションでは、Cloud Healthcare API に送信されるリクエストのレイテンシを短縮するさまざまな方法について説明します。
最も近いリージョンのロケーションへのリクエストの送信
最適な RTT とサーバー スループット パフォーマンスを得るには、最も近い Cloud Healthcare API リージョン ロケーションにクライアントからリクエストを送信します。使用可能なリージョンの一覧については、リージョンをご覧ください。
ウォームアップ リクエストの送信
クライアントがセッション中に Cloud Healthcare API サーバーに初めてリクエストを送信すると、クライアントはサーバーとの TCP ハンドシェイクを実行して 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