本頁面將概略說明 Spanner 要求涉及的高層元件,以及各元件如何影響延遲時間。
Spanner API 要求
用於提出 Spanner API 要求的高階元件包括:
Spanner 用戶端程式庫:在 gRPC 上方提供一層抽象化,並處理伺服器通訊細節,例如工作階段管理、交易和重試。
Google Front End (GFE) 是所有服務 (包括 Spanner) 都會用到的基礎架構服務。 Google Cloud GFE 會驗證所有傳輸層安全標準 (TLS) 連線是否已停止,並套用防範阻斷服務攻擊的保護措施。如要進一步瞭解 GFE,請參閱「Google 前端服務」。
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 握手。
無論是 REST 還是 gRPC,每個 Spanner 回應都包含標頭,其中包含 GFE 與後端 (Spanner 服務) 之間的總時間,包括要求和回應。這有助於進一步區分用戶端與 Google 網路之間的延遲時間來源。
spanner/gfe_latency
指標會擷取並公開 Spanner 要求的 GFE 延遲時間。
如要擷取並以視覺化方式呈現此元件的延遲,請參閱「使用 OpenTelemetry 擷取 GFE 延遲」或「使用 OpenCensus」。
Spanner API 要求延遲時間
Spanner API 要求延遲時間是指 Spanner API 前端收到要求的第一個位元組,到 Spanner API 前端傳送回應的最後一個位元組之間的時間長度 (以秒為單位)。延遲時間包括在 Spanner 後端和 API 層中處理 API 要求所需的時間。不過,這個延遲時間不包含 Spanner 用戶端和伺服器之間的網路或反向 Proxy 額外負載。
spanner.googleapis.com/api/request_latencies
指標會擷取並公開 Spanner 要求的 Spanner API 前端延遲時間。
如要擷取並以視覺化方式呈現此元件的延遲情形,請參閱「使用 OpenTelemetry 擷取 Spanner API 要求延遲」或「使用 OpenCensus」。
查詢延遲
查詢延遲時間是指在 Spanner 資料庫中執行 SQL 查詢所需的時間長度 (以毫秒為單位)。
executeSql API 可提供查詢延遲時間。
如果 QueryMode
參數設為 WITH_STATS
或 WITH_PLAN_AND_STATS
,則回應中會提供 Spanner 的 ResultSetStats
。ResultSetStats
包含在 Spanner 資料庫中執行查詢所花費的時間。
如要擷取並以視覺化方式呈現此元件的延遲時間,請參閱「使用 OpenTelemetry 擷取查詢延遲時間」或「使用 OpenCensus」。
後續步驟
- 瞭解如何在 Spanner 元件中找出延遲點。