TrueTime 與外部一致性

Spanner Omni 實作 TrueTime API 的軟體版本,在自行管理的環境中實現外部一致性。這個系統採用叢集架構,可提供權威時間戳記,確保基礎架構中的交易嚴格按照順序執行。

如要維持準確一致的時間戳記和可序列化性,請設定主要時間伺服器和主機型用戶端,根據網路延遲和時鐘漂移計算時間間隔。透過特定指標監控部署作業的效能,並確認基礎硬體符合時脈錯誤和時間戳記同步處理的必要規格。

Spanner Omni 和 TrueTime

為提供與 Spanner 管理版相同的外部一致性,Spanner Omni 會使用 Google TrueTime API 的軟體實作。在受管理 Spanner 環境中,TrueTime 會使用多個與實體 GPS 接收器和原子鐘同步的時間伺服器,達到狹窄的不確定性間隔。由於 Spanner Omni 是在自行管理的基礎架構上執行,無法依賴實體硬體,因此改用叢集架構來確保一致性。

採用這種做法後,所有交易都會依序執行。如果交易在另一筆交易開始前完成,第二筆交易會反映第一筆交易的影響。Spanner Omni 依賴下列因果順序:如果對 t1 = TrueTime::Now() 的呼叫在對 t2 = TrueTime::Now() 的呼叫開始前完成 (即使在不同機器上),則 t2.latest 會晚於 t1.earliest。透過從這些間隔指派提交時間戳記,Spanner Omni 可確保如果交易 t1 在交易 t2 開始前提交,重要時間戳記會反映 t1 發生在 t2 之前。

如要進一步瞭解 Spanner 的代管版本如何使用 TrueTime,請參閱 Spanner 說明文件中的「TrueTime 和外部一致性」。

TrueTime 架構

叢集架構使用兩個核心元件,在部署作業中提供 TrueTime:

  • 時間伺服器:叢集會將一個資料庫伺服器指定為主要時間伺服器。伺服器是整個 Spanner Omni 部署作業的權威單一可靠資料來源,可從本機高精確度時鐘提供時間。為確保高可用性,如果主要伺服器停止回應,叢集會動態升級另一個資料庫伺服器來擔任這個角色。時間伺服器會與 Spanner Omni 二進位檔一併封裝,不需要額外的基礎架構或外部依附元件。

  • 時間用戶端:部署作業中每部主機上都會執行背景精靈。這項服務會定期查詢主要時間伺服器,擷取目前的時間參數,並發布至機器上執行的程序。

TrueTime 會根據有界時鐘偏移和 Spanner Omni 資料庫伺服器與主要時間伺服器之間的網路封包往返時間 (RTT),計算時間間隔。部署作業中的所有主機都必須有本機時鐘,且時鐘的速率誤差必須在已知範圍內。

不確定度 (epsilon) 和延遲時間影響

TrueTime 會將時間表示為間隔 [earliest, latest],而非單一值。TrueTime 會根據下列兩項因素計算不確定間隔的大小:

  • 網路封包往返時間 (RTT):時間用戶端與主要時間伺服器同步處理時的延遲。與主要時間伺服器位於相同資料中心的用戶端,不確定度明顯低於遠端資料中心的用戶端。

  • 時鐘漂移:用戶端和伺服器電腦上的實體時鐘在同步之間自然漂移。

不確定性高可能會延長交易提交等待時間。不過,由於 Paxos 複寫也需要網路通訊,只要不確定性小於 Paxos 往返延遲時間,TrueTime 不確定性就不會增加交易提交延遲時間。

詳情請參閱「深入探討 Spanner:瞭解嚴格的可序列化與外部一致性」。

硬體需求

如要讓軟體式 TrueTime 正常運作,基礎硬體必須符合下列規定:

  • 時間戳記計數器:您必須使用硬體時間戳記計數器。在 Linux x86 架構中,這個計數器是時間戳記計數器 (TSC)。
  • 有界時脈速率錯誤:本機時脈的運作速率與額定頻率的差異,必須在已知且有界的速率錯誤範圍內。您可以使用 sla_tester_violation_count 指標監控時脈錯誤違規情形。詳情請參閱「TrueTime 可觀測性」。

限制

即時遷移虛擬機器 (VM) 或執行 Spanner Omni 的容器時,系統不支援 TrueTime。但如果是在 Amazon Web Services (AWS) 等平台使用特定合格的機型和 Amazon Machine Image (AMI),則不在此限。詳情請參閱「Spanner Omni 系統需求」。

觀測能力

您可以使用 Grafana 中的 TrueTime 資訊主頁監控下列指標。請使用這些指標,確保軟體式 TrueTime 在預期參數內運作:

指標 說明 建議做法
true_time_is_available 檢查 TrueTime API 是否可用。 設定任何無法使用的警報。如果無法使用 TrueTime,Spanner Omni 可能也無法使用。無法使用可能是暫時性或持續性問題,需要進行調查。
sla_tester_violation_count 指出潛在的時脈行為問題或違反硬體需求。 請進行調查,找出違規原因。可能原因包括即時遷移、VM 暫停,或 TSC 的運作時脈超出預期範圍。
true_time_interval_uncertainty 追蹤 TrueTime 間隔的 epsilon。 監控這項指標,盡量縮短交易延遲時間。不確定性越高,提交等待時間就越長,這可能會導致整體交易延遲時間增加。