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) в распределённых системах, обеспечивая строгую согласованность.
Источники
- 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).
- Документация Google Cloud Spanner. Google Cloud.
- Официальный блог Google Cloud Platform.
- Материалы конференций (Google Cloud Next, USENIX ATC).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →