グローバルに分散したデータベースは、あたかも一つの順序で起きたかのように見えるトランザクションを求めるが、異なるデータセンターのサーバーは時計を共有しておらず、どの書き込みが先に来たかを合意できない。

SpannerはこれをTrueTimeで解決する。各データセンターはGPS受信機と原子時計から読み取り、単一の瞬間ではなく時間の区間を報告するため、不確実性が明示される。トランザクションは、重複するあらゆるトランザクションの最新の可能性のある時刻より安全に後に自身のコミット時刻が来るまで待機し、そのタイムスタンプで全レプリカにコミットする。

その結果、グローバル規模で外部一貫性のある分散トランザクションを提供する最初のシステムとなり、Spannerは過去時点での非ブロッキング読み取り、ロック不要の読み取り専用トランザクション、全レプリカにわたる原子的なスキーマ変更を可能にした。

時間計測を速くするだけでなく、信頼できるものにする

GPSと原子時計が不確実性を境界づけるため、時間を信頼できる

不確実性を待ち切ることで、推測が証明可能な順序付けに変わる

単一のグローバルタイムスタンプが全レプリカに同じコミットポイントを与える

リージョン間の読み取りとスキーマ変更を安全に並行実行できるようにする

分散システムが全順序を必要とするとき、巧妙なメッセージングだけでは不十分である。共有時計を信頼できるものにすれば、順序付けは誰もが合意する時間から自然に導かれる。

SpannerはGoogleのリージョン間トランザクションサービスの基盤となり、後にCloud Spannerとして一般公開された。そのTrueTimeのアプローチは、実世界の時計を使って分散一貫性を解決する事例研究となった。

出典をたどる

出典

  1. Spanner: Google's Globally-Distributed Database Google Research · research.google
  2. Spanner: TrueTime and external consistency Google Cloud Documentation · cloud.google.com