本页面概要介绍了 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 请求和查询延迟时间。
以下部分介绍了您在上图中看到的每种延迟时间。
客户端往返延迟时间
客户端往返延迟时间是指客户端发送到数据库(通过 GFE 和 Spanner API 前端)的 Spanner API 请求的第一个字节与客户端从数据库收到的响应的最后一个字节之间的时长(以毫秒为单位)。
grpc.io/client/roundtrip_latency
指标提供了发送的 API 请求的第一个字节到收到的响应的最后一个字节之间的时间。
如需捕获此组件的延迟时间并对其进行可视化,请参阅使用 OpenTelemetry 捕获客户端往返延迟时间或使用 OpenCensus 捕获客户端往返延迟时间。
GFE 延迟时间
Google Front End (GFE) 延迟时间是 Google 网络收到来自客户端的远程过程调用与 GFE 收到响应的第一个字节之间的时长(以毫秒为单位)。此延迟时间不包括任何 TCP/SSL 握手。
Spanner 的每个响应(无论是 REST 还是 gRPC)都包含一个标头,其中包含请求和响应在 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.googleapis.com/api/request_latencies
指标用于捕获和公开 Spanner 请求的 Spanner API 前端延迟时间。
如需捕获并直观呈现此组件的延迟时间,请参阅使用 OpenTelemetry 捕获 Spanner API 请求延迟时间或使用 OpenCensus 捕获 Spanner API 请求延迟时间。
查询延迟时间
查询延迟时间是在 Spanner 数据库中运行 SQL 查询所需的时长(以毫秒为单位)。
查询延迟时间适用于 executeSql API。
如果 QueryMode
参数设置为 PROFILE
,则响应中会提供 Spanner 的 ResultSetStats
。
将 QueryMode
设置为 PROFILE
可随结果同时返回查询计划和执行统计信息。此外,ResultSetStats
包括在 Spanner 数据库中运行查询的耗时。
如需捕获此组件的延迟时间并对其进行可视化,请参阅使用 OpenTelemetry 捕获查询延迟时间或使用 OpenCensus 捕获查询延迟时间。
后续步骤
- 了解如何在 Spanner 组件中识别延迟点。