Spanner работает следующим образом:
- Данные в Spanner хранятся в полуреляционных таблицах. 3 Все данные имеют версию — временную метку подтверждения записи этих данных. 3
- Система поддерживает распределённые транзакции. 3 Узел, инициирующий транзакцию, автоматически становится её координатором и уведомляет все узлы-участники, содержащие реплику изменяемых данных. 1
- Для обеспечения согласованности данных используется специальный программный интерфейс TrueTime API. 13 В его основе лежит концепция единого времени, действующего в рамках всего хранилища Spanner, распределённого по нескольким дата-центрам. 1
- Глобальное время в Spanner распределено. 1 В составе каждого ЦОДа выделяются специальные серверы, именуемые «мастерами времени» (Time Master Devices — TMD). 1 Большинство из них получает сигналы точного времени от спутниковой системы GPS, а для надёжности есть особые экземпляры, которые называются «мастерами Армагеддона» (Armageddon Masters). 1 Все сервера TMD постоянно синхронизируют время, общаясь друг с другом с помощью специального сервиса timeslave. 1
- Каждый из узлов реализует транзакцию (запись изменений в журнал redolog и выполнение изменений данных в оперативной памяти) независимо от других участников, но зафиксировать её участники могут лишь по команде координатора. 1
- Координатор передаёт команду и рассылку всем участникам общей временной метки изменённых данных, единой для всех реплик. 1 При этом координатор следит, чтобы значение этой временной метки не превысило границу интервала, то есть находилось в рамках общего глобального времени. 1
Если хотя бы один из узлов не успеет отрапортовать о готовности к фиксации в отведённый временной интервал, координатор откатит выполнение транзакции и не даст команду на её фиксацию узлам-участникам, которые тоже будут вынуждены выполнить откат. 1 После этого попытка выполнения транзакции повторится. 1