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 数据库,负责对 Cloud Storage 存储分区的 数据库。

对 Spanner 进行远程过程调用时,Spanner 客户端库会准备 API 请求。然后,API 请求同时通过 GFE 和 Spanner API 前端 然后再访问 Spanner 数据库。

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

Spanner 架构图。

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

客户端往返延迟时间

客户端往返延迟时间是指 客户端发送到的 Spanner API 请求的第一个字节 数据库(通过 GFE 和 Spanner API 前端) end),以及客户端从数据库收到的响应的最后一个字节。

客户端往返延迟时间的 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 捕获和直观呈现 GFE 延迟时间。

Spanner API 请求延迟时间

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

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

spanner.googleapis.com/api/request_latencies 指标捕获的是 并公开了 Spanner 请求。

如需捕获和直观呈现此组件的延迟时间,请参阅使用 OpenTelemetry 捕获和直观呈现 Spanner API 请求延迟时间使用 OpenCensus 捕获和直观呈现 Spanner API 请求延迟时间。

查询延迟时间

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

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

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

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

QueryMode 设置为 PROFILE 可随结果同时返回查询计划和执行统计信息。此外, ResultSetStats 包含运行查询的用时 Spanner 数据库。

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

后续步骤