Spanner リクエストのレイテンシ ポイント

このページでは、Spanner リクエストに関連するコンポーネントの概要と、各コンポーネントがレイテンシに与える影響について説明します。

Spanner API リクエスト

Spanner API リクエストの作成に使用されるハイレベル コンポーネントは、次のとおりです。

  • Spanner クライアント ライブラリ。gRPC の上に抽象化レイヤを提供し、セッション管理、トランザクション、再試行などのサーバー通信の詳細を処理します。

  • Google Front End(GFE)。Spanner を含むすべての Google Cloud サービスに共通のインフラストラクチャ サービスです。GFE は、すべての Transport Layer Security(TLS)接続が停止されていることを確認して、サービス拒否攻撃に対する保護を適用します。GFE の詳細については、Google Front End サービスをご覧ください。

  • Cloud Spanner API フロントエンド。API リクエストに対してさまざまなチェック(認証、承認、割り当てチェック)が行なわれ、セッションとトランザクションの状態が維持されます。

  • Spanner データベース。データベースに対する読み取りと書き込みを実行します。

Spanner に対してリモート プロシージャ コールを行うと、Spanner クライアント ライブラリが API リクエストを準備します。その後、API リクエストは GFE と Spanner API フロントエンドの両方を通過して、Spanner データベースに到達します。

さまざまなコンポーネントとデータベース間のリクエストのレイテンシを測定し、比較することで、問題の原因となっているコンポーネントを特定できます。 これらのレイテンシには、クライアントの往復、GFE、Spanner API リクエスト、クエリのレイテンシが含まれます。

Spanner のアーキテクチャ図。

以降のセクションでは、上の図に示す各レイテンシの種類について説明します。

クライアントの往復レイテンシ

クライアントのラウンドトリップ レイテンシは、クライアントが GFE と Spanner API フロントエンドの両方からデータベースに送信する Spanner API リクエストの最初のバイトと、クライアントがデータベースから受信したレスポンスの最後のバイトの間の時間(ミリ秒単位)です。

クライアントの往復レイテンシの Spanner アーキテクチャ図

grpc.io/client/roundtrip_latency 指標は、送信されたAPI リクエストの最初のバイトから受信されたレスポンスの最後のバイトまでの時間を表します。

このコンポーネントのレイテンシをキャプチャして可視化するには、OpenTelemetry を使用してクライアントの往復レイテンシをキャプチャするまたは OpenCensus を使用してクライアントの往復レイテンシをキャプチャするをご覧ください。

GFE のレイテンシ

Google Front End(GFE)レイテンシは、Google ネットワークがクライアントからリモート プロシージャ コールを受信してから、GFE がレスポンスの最初のバイトを受信するまでの時間(ミリ秒単位)です。このレイテンシには TCP/SSL handshake は含まれません。

GFE のレイテンシの Spanner アーキテクチャ図。

REST でも gRPC でも、Spanner からのすべてのレスポンスには、リクエストとレスポンスの両方に対する GFE とバックエンド(Spanner サービス)間の合計時間を含んだヘッダーが含まれています。これは、クライアントと Google ネットワーク間のレイテンシの原因をいっそう際立たせるのに役立ちます。

spanner/gfe_latency 指標によって、Spanner リクエストに対する GFE レイテンシがキャプチャされ公開されます。

このコンポーネントのレイテンシをキャプチャして可視化するには、OpenTelemetry を使用して GFE のレイテンシをキャプチャするまたは OpenCensus を使用して GFE のレイテンシをキャプチャするをご覧ください。

Spanner API リクエストのレイテンシ

Spanner API リクエストのレイテンシは、Spanner API フロントエンドが受信したリクエストの最初のバイトから Spanner API フロントエンドが送信したレスポンスの最後のバイトまでの時間(秒単位)です。レイテンシには、Spanner バックエンドと API レイヤの両方で API リクエストの処理に必要な時間が含まれます。ただし、このレイテンシには、Spanner クライアントとサーバーの間のネットワークやリバース プロキシのオーバーヘッドは含まれません。

Spanner API リクエストのレイテンシの Spanner アーキテクチャ図。

spanner.googleapis.com/api/request_latencies 指標によって、Spanner リクエストに対する Spanner API フロントエンド レイテンシがキャプチャされ公開されます。

このコンポーネントのレイテンシをキャプチャして可視化するには、OpenTelemetry を使用して Spanner API リクエストのレイテンシをキャプチャするまたは OpenCensus を使用して Spanner API リクエストのレイテンシをキャプチャするをご覧ください。

クエリのレイテンシ

このクエリのレイテンシは、Spanner データベースで SQL クエリを実行するのにかかる時間の長さ(ミリ秒単位)です。

クエリのレイテンシの Spanner アーキテクチャ図。

クエリのレイテンシは、executeSql API で使用できます。

QueryMode パラメータを PROFILE に設定すると、Spanner の ResultSetStats をレスポンスで使用できます。

QueryModePROFILE に設定すると、クエリプランと、実行の統計情報および結果の両方が返されます。また、ResultSetStats には、Spanner データベースでのクエリの実行時間も含まれます。

このコンポーネントのレイテンシをキャプチャして可視化するには、OpenTelemetry を使用してクエリのレイテンシをキャプチャするまたは OpenCensus を使用してクエリのレイテンシをキャプチャするをご覧ください。

次のステップ