Spanner 请求中的延迟时间点

本页面简要介绍了 Spanner 请求涉及的概要组件,以及每个组件对延迟时间的影响。

Spanner API 请求

用于发出 Spanner API 请求的概要组件包括:

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

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

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

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

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

通过测量和比较不同组件和数据库之间的请求延迟时间,您可以确定是哪个组件导致了问题。这些延迟包括客户端往返、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 握手。

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

后续步骤