Spanner: Google's Globally-Distributed Database
James C. Corbett,
Jeffrey Dean,
Michael Epstein,
Andrew Fikes,
Christopher Frost,
JJ Furman,
Sanjay Ghemawat,
Andrey Gubarev,
Christopher Heiser,
Peter Hochschild,
Wilson Hsieh,
Sebastian Kanthak,
Eugene Kogan,
Hongyi Li,
Alexander Lloyd,
Sergey Melnik,
David Mwaura,
David Nagle,
Sean Quinlan,
Rajesh Rao,
Lindsay Rolig,
Yasushi Saito,
Michal Szymaniak,
Christopher Taylor,
Ruth Wang, and
Dale Woodford
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.
Published in the Proceedings of OSDI'12: Tenth
Symposium on Operating System Design and Implementation, Hollywood,
CA, October, 2012. Recipient of the Jay Lepreau Best Paper
Award.
Paper,
Slides,
Talk at OSDI
|