Eine global verteilte Datenbank möchte Transaktionen, die so aussehen, als wären sie in einer Reihenfolge geschehen, aber Server in verschiedenen Rechenzentren teilen keine Uhr und können sich nicht darauf einigen, welcher Schreibvorgang zuerst kam.
Spanner löst dies mit TrueTime: Jedes Rechenzentrum liest von GPS-Empfängern und Atomuhren und meldet ein Zeitintervall statt eines einzelnen Zeitpunkts, sodass die Unsicherheit explizit ist. Eine Transaktion wartet, bis ihr Commit-Zeitpunkt sicher nach dem spätestmöglichen Zeitpunkt jeder überlappenden Transaktion liegt, und committet dann mit diesem Zeitstempel an alle Replikate.
Das Ergebnis ist das erste System, das extern konsistente verteilte Transaktionen im globalen Maßstab bietet, wodurch Spanner nicht blockierende Lesevorgänge in der Vergangenheit, sperrfreie schreibgeschützte Transaktionen und atomare Schemaänderungen über alle Replikate hinweg ermöglichen kann.
Die Zeitmessung vertrauenswürdig machen, nicht nur schnell
GPS und Atomuhren begrenzen die Unsicherheit, sodass der Zeit vertraut werden kann
Das Abwarten der Unsicherheit verwandelt eine Vermutung in eine beweisbare Reihenfolge
Ein globaler Zeitstempel gibt allen Replikaten denselben Commit-Punkt
Es macht regionsübergreifende Lesevorgänge und Schemaänderungen sicher parallel ausführbar
Wenn ein verteiltes System eine totale Ordnung benötigt, reicht geschicktes Messaging nicht aus; man muss die gemeinsame Uhr vertrauenswürdig machen, sodass die Reihenfolge aus einer Zeit folgt, auf die sich alle einigen.
Spanner wurde zum Rückgrat hinter Googles regionsübergreifenden Transaktionsdiensten und später öffentlich als Cloud Spanner angeboten. Sein TrueTime-Ansatz wurde zu einer Fallstudie darüber, wie man mit realen Uhren verteilte Konsistenz löst.
DEN BELEGEN FOLGEN
Die Quellen
- Spanner: Google's Globally-Distributed Database Google Research · research.google
- Spanner: TrueTime and external consistency Google Cloud Documentation · cloud.google.com