Spanner 请求中的延迟时间点

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

Spanner API 请求

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

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

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

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

  • Spanner 数据库,负责对数据库执行读写操作。

对 Spanner 进行远程过程调用时,Spanner 客户端库会准备 API 请求。然后,API 请求先经过 GFE 和 Spanner API 前端,然后再到达 Spanner 数据库。

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

Spanner 架构图。

以下部分介绍了您在上图中看到的每种延迟时间。

客户端往返延迟时间

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

客户端往返延迟时间的 Spanner 架构图。

grpc.io/client/roundtrip_latency 指标提供了从 API 请求发送的第一个字节到收到响应的最后一个字节之间间隔的时间。

如需捕获并直观呈现此组件的延迟时间,请参阅使用 OpenTelemetry 捕获并直观呈现客户端往返延迟时间使用 OpenCensus

GFE 延迟时间

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

GFE 延迟时间的 Spanner 架构图。

来自 Spanner 的每个响应(无论是 REST 还是 gRPC)都包含一个标头,该标头包含请求和响应在 GFE 和后端(Spanner 服务)之间的总时间。这有助于更好地区分客户端和 Google 网络之间的延迟来源。

spanner/gfe_latency 指标会捕获并公开 Spanner 请求的 GFE 延迟时间。

如需捕获并直观呈现此组件的延迟时间,请参阅使用 OpenTelemetry 捕获并直观呈现 GFE 延迟时间使用 OpenCensus

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 数据库中运行 SQL 查询所需的时间(以毫秒为单位)。

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

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

如果 QueryMode 参数设置为 PROFILE,则响应中会显示 Spanner 的 ResultSetStats

QueryMode 设置为 PROFILE 时,系统会同时返回查询计划和执行统计信息以及结果。此外,ResultSetStats 还包括在 Spanner 数据库中运行查询所用的时间。

如需捕获并直观呈现此组件的延迟时间,请参阅使用 OpenTelemetry 捕获并直观呈现查询延迟时间使用 OpenCensus

后续步骤