Spanner 请求中的延迟时间点

本页概述了 Spanner 请求涉及的高层级组件,以及每个组件如何影响延迟时间。

Spanner API 请求

用于发出 Spanner API 请求的高层级组件包括:

  • Spanner 客户端库,可在 gRPC 基础上提供一个抽象层,并处理服务器通信详细信息,例如会话管理、事务和重试。

  • Google Front End (GFE),这是一项对所有 Google Cloud 服务(包括 Spanner)通用的基础设施服务。GFE 会验证所有传输层安全协议 (TLS) 连接是否已停止,并应用保护措施来防范拒绝服务攻击。如需详细了解 GFE,请参阅 Google Front End 服务。

  • Spanner API 前端 (AFE),用于对 API 请求执行各种检查(包括身份验证、授权和配额检查),并维护会话和事务状态。

  • Spanner 数据库,用于对数据库执行读写操作。

当您对 Spanner 进行远程过程调用时,Spanner 客户端库会准备 API 请求。然后,API 请求会通过 GFE 和 Spanner AFE,最后到达 Spanner 数据库。

通过测量和比较不同组件与数据库之间的请求延迟时间,您可以确定哪个组件导致了问题。 这些延迟时间包括客户端端到端延迟时间、GFE 延迟时间、Spanner API 请求延迟时间和查询延迟时间。

Spanner 架构图。

以下部分将介绍上图中的每种延迟时间。

端到端延迟时间

端到端延迟时间是指客户端(通过 GFE 和 Spanner API 前端)向数据库发送 Spanner API 请求的第一个字节与客户端从数据库收到响应的最后一个字节之间的时长(以毫秒为单位)。

针对端到端延迟时间的 Spanner 架构图。

spanner.googleapis.com/client/operation_latencies 指标提供了发送的 API 请求的第一个字节到收到的响应的最后一个字节之间的时间。其中包括客户端库执行的重试。

如需了解详情,请参阅查看和管理客户端指标。

GFE 延迟时间

Google Front End (GFE) 延迟时间是指 Google 网络收到来自客户端的远程过程调用与 GFE 收到响应的第一个字节之间的时长(以毫秒为单位)。此延迟时间不包括任何 TCP/SSL 握手。

针对 GFE 延迟时间的 Spanner 架构图。

Spanner 的每个响应(REST 或 gRPC)都包含一个标头,其中包含请求和响应在 GFE 与后端(Spanner 服务)之间的总时间。这有助于更好地区分客户端与 GFE 之间的延迟时间的来源。

spanner.googleapis.com/client/gfe_latencies 指标用于捕获和公开 Spanner 请求的 GFE 延迟时间。

如需��解详情,请参阅查看和管理客户端指标。

Spanner API 请求延迟时间

Spanner API 请求延迟时间是指从 Spanner AFE 收到请求的第一个字节到 Spanner API 前端发送响应的最后一个字节之间的时长(以秒为单位)。此延迟时间包括在 Spanner 后端和 API 层处理 API 请求所需的时间。不过,此延迟时间不包括 Spanner 客户端与服务器之间的网络或反向代理开销。

针对 Spanner API 请求延迟时间的 Spanner 架构图。

spanner.googleapis.com/api/request_latencies 指标用于捕获和公开 Spanner 请求的 Spanner AFE 延迟时间。如需了解详情,请参阅 Spanner 指标。

查询延迟时间

查询延迟时间是在 Spanner 数据库中运行 SQL 查询所需的时长(以毫秒为单位)。

查询延迟时间的 Spanner 架构图。

查询延迟时间适用于 executeSql API。

如果 QueryMode 参数设置为 WITH_STATS 或 WITH_PLAN_AND_STATS,则响应中会提供 Spanner 的 ResultSetStats。ResultSetStats 包括在 Spanner 数据库中运行查询的耗时。

如需捕获和直观呈现查询延迟时间,请参阅使用 OpenTelemetry 捕获查询延迟时间。

后续步骤