Открыть сервис

Google Spanner

Google Spanner — это глобально распределённая, масштабируемая, мультиверсионная система управления реляционными базами данных, разработанная компанией Google. Она сочетает в себе свойства реляционных баз данных (поддержка SQL и ACID-транзакций) с горизонтальной масштабируемостью и высокой доступностью, характерными для NoSQL-систем. Spanner является ключевым компонентом инфраструктуры Google, обеспечивающим работу таких сервисов, как рекламная платформа AdWords, Gmail и Google Play.

История

Разработка Spanner началась в 2006 году как ответ на ограничения существовавших систем хранения данных Google. Предыдущие решения, такие как Bigtable (распределённое хранилище типа «ключ-значение») и Megastore (гибридная система, поддерживающая реляционную модель), не обеспечивали полной согласованности данных на глобальном уровне или имели низкую пропускную способность при записи. Spanner был задуман как система, способная обрабатывать транзакции с ACID-гарантиями в масштабе всей планеты, сохраняя при этом высокую производительность.

Первая публичная информация о Spanner появилась в 2012 году, когда Google опубликовала научную статью «Spanner: Google’s Globally-Distributed Database» (авторы: Джеймс К. Корбетт и др.). В статье описывалась архитектура системы, включая уникальную технологию TrueTime. В 2017 году Google объявила о коммерческой доступности Spanner как облачного сервиса (Google Cloud Spanner), что позволило сторонним разработчикам использовать эту технологию.

Архитектура и ключевые особенности

Spanner построен на принципах глобальной распределённости и автоматической репликации данных. Основные архитектурные решения включают:

TrueTime

TrueTime — это ключевая технология, лежащая в основе Spanner. Она представляет собой глобально синхронизированные часы, реализованные с помощью GPS-приёмников и атомных часов, установленных в дата-центрах Google. TrueTime позволяет системе получать точную временную метку с известным интервалом неопределённости (обычно 1–7 мс). Используя TrueTime, Spanner может назначать глобально упорядоченные временные метки для транзакций, что обеспечивает внешнюю согласованность (external consistency) — свойство, при котором порядок транзакций соответствует реальному времени их выполнения.

Репликация и шардирование

Данные в Spanner автоматически разбиваются на фрагменты (шарды), которые реплицируются на несколько дата-центров в разных географических регионах. Репликация использует протокол консенсуса Paxos, который гарантирует, что все копии данных остаются согласованными даже при сбоях отдельных узлов. Количество реплик и их расположение настраиваются администратором, что позволяет балансировать между задержками и доступностью.

Модель данных

Spanner поддерживает реляционную модель данных с таблицами, строками и столбцами. Система использует SQL-подобный язык запросов (GoogleSQL) с поддержкой JOIN, подзапросов, агрегатных функций и транзакций. Каждая таблица может иметь первичный ключ, который определяет порядок хранения данных на диске. Spanner также поддерживает вторичные индексы и интервальные запросы.

ACID-транзакции

Spanner обеспечивает полную поддержку ACID-транзакций (атомарность, согласованность, изолированность, долговечность). Транзакции могут быть как однорядными, так и многорядными, и могут затрагивать данные, распределённые по разным регионам. Благодаря TrueTime, Spanner гарантирует, что транзакции выполняются в глобальном порядке, что исключает аномалии, связанные с параллельным доступом.

Применение

Spanner используется внутри Google для критически важных сервисов, требующих высокой согласованности и доступности. Примеры включают:

  • AdWords (Google Ads): рекламная платформа Google, обрабатывающая миллиарды запросов в день.
  • Gmail: хранение и обработка электронной почты.
  • Google Play: управление каталогом приложений, транзакциями и пользовательскими данными.
  • Google Photos: хранение метаданных фотографий.

С 2017 года Spanner доступен как облачный сервис Google Cloud Spanner. Он используется компаниями из различных отраслей, включая финансы, розничную торговлю, игры и логистику, для создания глобальных приложений с высокой нагрузкой.

Преимущества и ограничения

Преимущества

  • Глобальная согласованность: Spanner гарантирует внешнюю согласованность данных, что критически важно для финансовых и транзакционных систем.
  • Высокая доступность: автоматическая репликация и отказоустойчивость обеспечивают доступность 99.999% (пять девяток) для данных, реплицированных в нескольких регионах.
  • Горизонтальная масштабируемость: система может обрабатывать петабайты данных и миллионы запросов в секунду, автоматически распределяя нагрузку.
  • Поддержка SQL: привычный интерфейс для разработчиков, знакомых с реляционными базами данных.

Ограничения

  • Задержки: из-за необходимости синхронизации через протокол Paxos и использования TrueTime, задержки записи могут быть выше, чем у локальных баз данных (обычно 10–50 мс для межрегиональных операций).
  • Сложность управления: настройка репликации, шардирования и мониторинга требует глубоких знаний распределённых систем.
  • Стоимость: как облачный сервис, Spanner может быть дороже традиционных решений для небольших проектов.
  • Ограниченная гибкость схемы: Spanner требует строгой схемы данных (schema-on-write), что может быть неудобно для приложений с динамической структурой.

Сравнение с другими системами

Spanner часто сравнивают с другими распределёнными базами данных, такими как CockroachDB, Amazon Aurora и FoundationDB. CockroachDB, вдохновлённая архитектурой Spanner, также использует TrueTime-подобные часы (HLC) и протокол консенсуса Raft, но имеет более низкую производительность при глобальных транзакциях. Amazon Aurora, напротив, оптимизирована для низких задержек в пределах одного региона, но не обеспечивает глобальной согласованности. FoundationDB, разработанная Apple, предлагает строгую согласованность, но не поддерживает SQL из коробки.

Интересные факты

  • Spanner является одной из первых систем, реализовавших внешнюю согласованность в глобальном масштабе.
  • Технология TrueTime требует физической инфраструктуры: каждый дата-центр Google оснащён GPS-приёмниками и атомными часами.
  • В 2017 году Spanner получил премию ACM SIGOPS Hall of Fame Award за вклад в развитие распределённых систем.
  • Google использует Spanner для хранения данных о своих сотрудниках и внутренних процессах, что подтверждает его надёжность.

Критика

Основная критика Spanner связана с его закрытостью: до 2017 года система была доступна только внутри Google, что ограничивало возможности независимого аудита. После выхода облачной версии появились жалобы на высокую стоимость и сложность миграции с других баз данных. Некоторые эксперты отмечают, что Spanner избыточен для приложений, не требующих глобальной согласованности, и что его использование может быть неоправданным для небольших проектов.

Источники

  • Corbett, J. C., et al. (2012). «Spanner: Google’s Globally-Distributed Database». Proceedings of the 10th USENIX Symposium on Operating Systems Design and Implementation (OSDI).
  • Google Cloud Documentation. «Cloud Spanner Overview».
  • Abadi, D. (2012). «Consistency Tradeoffs in Modern Distributed Database System Design». IEEE Computer.
  • Документация CockroachDB. «Comparison with Google Cloud Spanner».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →