- Universe
- 一次 Spanner 部署。由於 Spanner 是全球性地管理資料,實際運行的 universe 只有寥寥數個;Google 當時跑的是測試/實驗用、開發兼生產用,以及純生產用三個 universe。
- Zone
- universe 之下管理部署與實體隔離的單位,大致相當於一次 Bigtable 部署,也是資料可複寫的位置粒度。一個 zone 含一個 zonemaster 與一百到數千台 spanserver,並可在系統運行中新增或移除。
- Spanserver
- 實際對客戶端提供資料服務的伺服器程序。每台 spanserver 負責 100 到 1000 個 tablet,在每個 tablet 上跑一個 Paxos 狀態機;在它擔任 leader 的 tablet 上,還額外維護 lock table 與 transaction manager。
- Tablet
- Spanner 的儲存容器,實作一袋從 (key, timestamp) 到字串的對應,底層由 Colossus 上的類 B-tree 檔案與 write-ahead log 支撐。與 Bigtable 的 tablet 不同,它不必是 row space 中單一段字典序連續的分割,因為它可以容納多個 directory。
- Directory
- 一組共用相同前綴的連續鍵,由 directory table 的一列加上該鍵之下所有交錯存放的後代列構成。它是資料配置、複寫組態與跨 Paxos group 搬移的單位;過大的 directory 會被切成 fragment。
- TTinterval 與 epsilon
- TT.now() 回傳 TTinterval,即保證涵蓋呼叫當下絕對時間的區間 [earliest, latest]。epsilon 是區間寬度的一半,也就是瞬時誤差界,在 Google 生產環境中通常呈 1 到 7 毫秒的鋸齒,平均接近 4 毫秒。
- Commit wait
- 協調者 leader 必須等到 TT.after(s) 對提交時戳 s 成立,才允許任何複本讓該交易提交的資料被看見。這保證了提交變成可見時,s 已確定位於絕對時間的過去,期望代價至少是 2 epsilon。
- External consistency
- 等價於 linearizability 的保證:若交易 T1 在交易 T2 開始之前提交,則 T1 的提交時戳小於 T2 的提交時戳。Spanner 是第一個在全球規模上提供此保證的系統。
- Safe time
- 複本保證已跟上的最大時戳,也就是它能服務讀取的最新時戳。它取兩者最小值:Paxos safe time(已套用的最高 Paxos 寫入之時戳),以及 transaction manager safe time(群組中任一已 prepare 交易的最小 prepare 時戳減一)。