本页概述了 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 请求延迟时间和查询延迟时间。
以下部分将介绍上图中的每种延迟时间。
客户端往返延迟时间
客户端往返延迟时间是指客户端(通过 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 AFE 收到请求的第一个字节与 Spanner API 前端发送响应的最后一个字节之间的时长(以秒为单位)。此延迟时间包括在 Spanner 后端和 API 层处理 API 请求所需的时间。不过,此延迟时间不包括 Spanner 客户端与服务器之间的网络或反向代理开销。
spanner.googleapis.com/api/request_latencies
指标用于捕获和公开 Spanner 请求的 Spanner AFE 延迟时间。
如需捕获和直观呈现此组件的延迟时间,请参阅使用 OpenTelemetry 捕获 Spanner API 请求延迟时间或使用 OpenCensus 捕获 Spanner API 请求延迟时间。
查询延迟时间
查询延迟时间是指在 Spanner 数据库中运行 SQL 查询所需的时长(以毫秒为单位)。
查询延迟时间适用于 executeSql API。
如果 QueryMode
参数设置为 WITH_STATS
或 WITH_PLAN_AND_STATS
,则响应中会提供 Spanner 的 ResultSetStats
。ResultSetStats
包括在 Spanner 数据库中运行查询的耗时。
如需捕获和直观呈现此组件的延迟时间,请参阅使用 OpenTelemetry 捕获查询延迟时间或使用 OpenCensus 捕获查询延迟时间。
后续步骤
- 了解如何识别 Spanner 组件中的延迟时间点。