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

Google Cloud Spanner

Google Cloud Spanner — это полностью управляемая, масштабируемая, реляционная база данных, разработанная компанией Google LLC (организация, зарегистрированная в США; деятельность на территории РФ регулируется законодательством). Она предоставляется как облачный сервис в составе платформы Google Cloud Platform (GCP). Ключевой особенностью Spanner является обеспечение строгой согласованности данных (strong consistency) и поддержка транзакций ACID (атомарность, согласованность, изолированность, долговечность) в глобальном масштабе, что позволяет объединять базы данных, распределённые по разным континентам, как единое целое.

История

Разработка Spanner была начата внутри Google как ответ на потребность в базе данных, способной обслуживать глобальные сервисы компании, такие как Google Search, Gmail и Google Ads, с требованиями высокой доступности, масштабируемости и строгой согласованности. Первое публичное описание системы было представлено в научной статье в 2012 году. В 2017 году Google объявила о коммерческой доступности Google Cloud Spanner как облачного сервиса для внешних клиентов. Это стало важным событием, так как до этого решения для глобального распределения данных часто жертвовали строгой согласованностью в пользу так называемой «конечной согласованности» (eventual consistency), используемой, например, в Amazon DynamoDB или Apache Cassandra.

Архитектура и принципы работы

В основе Spanner лежит несколько ключевых технологических решений.

Глобальное распределение и репликация

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

TrueTime и глобальная согласованность

Главная инновация, отличающая Spanner от других распределённых баз данных, — это использование службы TrueTime. TrueTime — это глобально синхронизированное время, реализованное с помощью GPS-приёмников и атомных часов, установленных в дата-центрах Google. TrueTime предоставляет API, который возвращает не точное время, а временной интервал, в котором гарантированно находится текущее время. Благодаря этому Spanner может назначать транзакциям глобально уникальные и согласованные временные метки. Это позволяет реализовать многоверсионность и сериализуемость транзакций (строжайший уровень изоляции) без узких мест, характерных для традиционных распределённых блокировок.

Хранение данных

Spanner использует гибридную модель хранения. Данные хранятся в виде строк с определённой схемой (как в реляционных базах данных). Однако физически строки организованы в «таблетки» (tablets) — небольшие фрагменты данных, которые автоматически балансируются между серверами. Для эффективного хранения и запросов Spanner поддерживает как строковое, так и колоночное хранение (через механизм interleaved tables), что оптимизирует производительность для различных типов запросов.

Ключевые характеристики

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

Spanner поддерживает реляционную модель данных с возможностью определения схемы (DDL). Поддерживаются стандартные типы данных SQL, включая числовые, строковые, дату/время, а также массивы и структуры. Важной особенностью является поддержка межтабличных связей (interleaved tables), когда строки дочерней таблицы физически хранятся вместе с соответствующей строкой родительской таблицы, что ускоряет JOIN-запросы.

Транзакции

Spanner гарантирует полную поддержку ACID-транзакций. Все операции чтения и записи в рамках одной транзакции выполняются изолированно и последовательно. Это критически важно для финансовых приложений, систем бронирования и других сценариев, где недопустимы расхождения данных.

Масштабируемость

Spanner обеспечивает горизонтальное масштабирование без даунтайма. Пользователь может добавлять или удалять вычислительные ресурсы (узлы) и увеличивать объём хранилища по мере необходимости. Система автоматически перераспределяет данные между узлами, сохраняя производительность.

Доступность и согласованность

Spanner гарантирует доступность на уровне 99.999% (пять девяток) при правильной конфигурации репликации. При этом все операции чтения и записи возвращают самую актуальную версию данных (strongly consistent reads). Это контрастирует с системами «в конечном счёте согласованными», где чтение может вернуть устаревшие данные.

Классификация

Google Cloud Spanner относится к классу NewSQL — систем, которые стремятся сочетать масштабируемость NoSQL-решений с гарантиями ACID и SQL-интерфейсом традиционных реляционных СУБД. В отличие от классических NoSQL-решений (например, MongoDB или Cassandra), Spanner требует строгой схемы данных и поддерживает сложные запросы. В отличие от традиционных SQL-баз (например, PostgreSQL или MySQL), Spanner спроектирован для работы на десятках и сотнях узлов без необходимости вручную шардировать данные.

Применение

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

  • Глобальные финансовые системы: Платёжные системы, биржевые торговые площадки, системы учёта, где требуется строгая согласованность и высокая доступность по всему миру.
  • Ритейл и электронная коммерция: Крупные интернет-магазины с глобальной аудиторией, где необходимо синхронизировать данные о заказах, запасах и пользователях между регионами.
  • Игры: Многопользовательские онлайн-игры, где требуется мгновенная и согласованная синхронизация состояния игрового мира для миллионов игроков.
  • SaaS-платформы: Приложения, предоставляемые как услуга, которые обслуживают клиентов из разных стран и нуждаются в едином, согласованном источнике данных.
  • Логистика и управление цепочками поставок: Системы отслеживания грузов в реальном времени, где каждое изменение статуса должно быть немедленно отражено для всех участников.

Ограничения и критика

Несмотря на свои преимущества, Google Cloud Spanner имеет ряд ограничений:

  • Высокая стоимость: Spanner является одним из самых дорогих облачных сервисов баз данных. Плата взимается за каждый выделенный узел (ноду), а не за фактическое использование, что делает его экономически невыгодным для небольших проектов или проектов с низкой нагрузкой.
  • Сложность настройки: Для эффективной работы требуется понимание распределённых систем и тщательное проектирование схемы данных, особенно в части первичных ключей и interleaved tables. Неправильная схема может привести к снижению производительности.
  • Привязка к вендору (vendor lock-in): Spanner является проприетарным продуктом Google, что означает отсутствие возможности легко мигрировать на другую платформу без серьёзной переработки приложения.
  • Ограниченный SQL: Хотя Spanner поддерживает SQL, его диалект не полностью совместим со стандартом ANSI SQL. Некоторые функции, такие как хранимые процедуры, триггеры и оконные функции, отсутствуют или имеют ограниченную реализацию.
  • Зависимость от TrueTime: Архитектура Spanner жёстко завязана на службу TrueTime, которая является внутренней разработкой Google. Это делает невозможным развёртывание Spanner в других облачных средах или on-premise.

Конкуренты

Основными конкурентами Google Cloud Spanner на рынке глобально распределённых SQL-баз данных являются:

  • Amazon Aurora Global Database: Сервис Amazon Web Services (AWS), который также обеспечивает глобальную репликацию, но с менее строгой моделью согласованности (асинхронная репликация между регионами).
  • CockroachDB: Открытая (open-source) распределённая SQL-база данных, построенная на схожих принципах (использует часы с коррекцией для глобальной согласованности). Она может быть развёрнута в различных средах, включая on-premise.
  • YugabyteDB: Ещё одна open-source распределённая SQL-база данных, которая также предлагает глобальное распределение и ACID-транзакции.
  • Azure Cosmos DB: Сервис Microsoft Azure, который предоставляет глобальное распределение, но по умолчанию использует модель конечной согласованности, хотя и поддерживает более строгие уровни.

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

  • Spanner используется внутри Google для работы таких сервисов, как Google Play, Google Photos и Google Ads.
  • Технология TrueTime, лежащая в основе Spanner, была удостоена премии ACM SIGOPS Hall of Fame Award.
  • Название «Spanner» (англ. «гаечный ключ») было выбрано как игра слов: система позволяет «затянуть гайки» (tighten the screws) в распределённых системах, обеспечивая строгую согласованность.

Источники

  1. Corbett, J. C., Dean, J., Epstein, M., et al. (2012). Spanner: Google’s Globally-Distributed Database. Proceedings of the 10th USENIX Symposium on Operating Systems Design and Implementation (OSDI).
  2. Документация Google Cloud Spanner. Google Cloud.
  3. Официальный блог Google Cloud Platform.
  4. Материалы конференций (Google Cloud Next, USENIX ATC).

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

На главную BFOmetr →