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