# Spanner [[Google]] が開発・運営するグローバル分散 SQL データベース。[[TrueTime]] API を活用して **外部一貫性(厳密直列化可能性)** を実現する世界初のシステム。現在は Google Cloud の マネージドサービス **Cloud Spanner** として提供されている。 ## 主要特性 - **TrueTime**: GPS と原子時計で時刻不確実性区間を返す API。commit wait でタイムスタンプ順序を保証 - **外部一貫性**: 全トランザクション間の実時間順序とタイムスタンプ順序が一致 - **Paxos on 2PC**: Paxos グループ上に 2PC を組み合わせた RW トランザクション - **専用ハードウェア要件**: TrueTime は GPS/原子時計を必要とし、汎用クラウド環境では利用不可 ## CockroachDB との比較 CockroachDB([[@2020__SIGMOD__CockroachDB - The Resilient Geo-Distributed SQL Database]])は Spanner の代替として以下の違いを持つ: | 観点 | Spanner | CockroachDB | |---|---|---| | 一貫性保証 | 厳密直列化可能性(外部一貫性) | 単一キー線形化可能性のみ | | クロック機構 | TrueTime(専用HW) | HLC(NTP / Amazon Time Sync) | | コミット方式 | commit wait(最大オフセット待機) | Read Refresh(楽観的・リトライ可能性あり) | | ハードウェア要件 | 専用(GPS/原子時計) | 汎用クラウドサーバー | | YCSB スループット | 多くのワークロードで CRDB より低い | 多くのワークロードで高い | | レイテンシ | commit wait により高い | 低い(特に低コンテンション時) | YCSB ベンチマークでは CRDB が多数のワークロードで Spanner を上回るスループットと低レイテンシを示した(YCSB A を除く)。(Source: [[@2020__SIGMOD__CockroachDB - The Resilient Geo-Distributed SQL Database]] §6.3) ## ウィットネスレプリカ(詳説 データベース 第11章) *詳説 データベース* 第11章は、レプリカをデータを保持する「コピーレプリカ」と書き込み事実のみを記録する「ウィットネスレプリカ」に分割してストレージコストを削減する**ウィットネスレプリカ**という概念の実装例の1つとして Spanner を挙げる(もう1つの例は Apache Cassandra)。この手法は、n 個のコピーレプリカと m 個のウィットネスレプリカで n + m 個のコピーと同等の可用性を実現する。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 11 レプリケーションと一貫性]] §11.9) ## 分散トランザクションのアーキテクチャ(詳説 データベース 第13章) *詳説 データベース* 第13章は、Spanner のアーキテクチャを span サーバ・タブレット・Paxos グループという粒度で解説する。各 span サーバ(レプリカ)は複数のタブレットを保持し、Paxos ステートマシンが付加される。レプリカは Paxos グループにグループ分けされ、各グループは長期に存続するリーダーを持つ。リーダーは二相ロックを実装するためのロックテーブルと、マルチシャード分散トランザクションを管理するトランザクションマネージャを持つ。すべての書き込みは Paxos グループのリーダーを経由する必要があるが、読み取りは最新のレプリカから直接提供できる。マルチシャードトランザクションでは、グループリーダー同士が協調してツーフェーズコミットを実行する。Spanner は個々のノードではなく Paxos グループを 2PC のコホートとすることで、グループの一部メンバーが停止しても 2PC を続行できるようにし、可用性を改善する。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 13 分散トランザクション]] §13.2.1, §13.5) Spanner は読み書き(RW)・読み取り専用(RO)・スナップショット読み取りの3種類の操作を提供する。RW のみ悲観的並行制御(二相ロック)とリーダーレプリカの存在を必要とし、RO とスナップショット読み取りはロックなしでどのレプリカでも実行できる。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 13 分散トランザクション]] §13.5) ## SREの視点: Google Workflowのグローバル整合性ジャーナルとしてのSpanner(SRE Book第25章) [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]]では、Spannerは継続的データパイプラインシステム[[Google Workflow]]のグローバルな整合性を支える基盤として登場する。Workflowの Task Master は、グローバルに利用可能で一貫性がありながら低スループットなファイルシステムとして Spanner にジャーナルを保存する。どの Task Master が書き込み可能かは [[Chubby]] を使ったリーダー選出で決められ、その結果が Spanner に永続化される。Spanner は高スループットなファイルシステムには向かないため、グローバルに分散した Workflow は異なるクラスタで動く2つ以上のローカル Workflow に加え、グローバル Workflow 内の「参照タスク」という概念を併用することで、Spanner の低スループット制約を回避しながらデータセンター全体の障害に対する事業継続性を確保する。(Source: [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]]) ## pubsub 批判論文における位置づけ(HOTOS 25) [[@2025__HOTOS__Understanding the limitations of pubsub systems]] は、Spanner を「producer storage かつ built-in watch」の代表例として位置づける。組み込みの watch 機構である **Change Data Streams**([16])を持ち、Kubernetes API server が watchable な etcd ストアに支えられているのと同様の設計だと評価される。同論文の watch API はモノトニックなトランザクションバージョンを前提とするが、その具体例として Spanner の TrueTime タイムスタンプ・TiDB の TSO タイムスタンプ・MySQL の gtid が挙げられている。また Spanner の read-only replica([14])は、同種データベース展開におけるスナップショット意味論をすでに達成した内部プロトコルの例として、著者らが提案する watch ベースの異種ストア間レプリケーションの「まだ実現できていない目標」の対比に使われている。(Source: [[@2025__HOTOS__Understanding the limitations of pubsub systems]]) ## 関連 - 論文: [[@2013__TOCS__Spanner - Google's Globally Distributed Database]] - 比較: [[@2020__SIGMOD__CockroachDB - The Resilient Geo-Distributed SQL Database]] - 概念: [[外部一貫性]] / [[TrueTime]] / [[分散トランザクション]] / [[クォーラムベースレプリケーション]] / [[周期パイプライン]] - 所属: [[Google]] - エンティティ: [[Google Workflow]] / [[Chubby]] ## 出典 - [[@2013__TOCS__Spanner - Google's Globally Distributed Database]](OSDI 2012 / TOCS 2013) - [[@2020__SIGMOD__CockroachDB - The Resilient Geo-Distributed SQL Database]](SIGMOD 2020 §6.3 / §8) - [[@2021__OReillyJapan__詳説 データベース - Chapter 11 レプリケーションと一貫性]](§11.9 ウィットネスレプリカの実装例) - [[@2021__OReillyJapan__詳説 データベース - Chapter 13 分散トランザクション]](§13.2, §13.5 span サーバ/Paxos グループ粒度でのアーキテクチャ解説) - [[@2016__OReilly__SRE Book - Chapter 25 Data Processing Pipelines]](Google Workflowのグローバル整合性ジャーナルとしての利用) - [[@2025__HOTOS__Understanding the limitations of pubsub systems]](Change Data Streams を built-in watch の代表例として引用)