Spanner: Google's Globally-Distributed Database

Ruth Wang
Yasushi Saito
Hongyi Li
David Mwaura
Sergey Melnik
Eugene Kogan
Sebastian Kanthak
Christopher Taylor
Lindsay Rolig
Michal Szymaniak
Christopher Heiser
Rajesh Rao
JJ Furman
Michael Epstein
Peter Hochschild
Christopher Frost
Dale Woodford
Andrew Fikes
Andrey Gubarev
David Nagle
OSDI (2012)

Abstract

Spanner is Google's scalable, multi-version, globally-distributed, and synchronously-replicated database. It is the first system to distribute data at global scale and support externally-consistent distributed transactions. This paper describes how Spanner is structured, its feature set, the rationale underlying various design decisions, and a novel time API that exposes clock uncertainty. This API and its implementation are critical to supporting external consistency and a variety of powerful features: non-blocking reads in the past, lock-free read-only transactions, and atomic schema changes, across all of Spanner.