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 二進位檔一併封裝,不需要獨立基礎架構或外部依附元件。

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

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 監控這項指標,盡量縮短交易延遲時間。不確定性越高,提交等待時間就越長,這可能會增加整體交易延遲。