Spanner
Spanner — это распределённая, глобально реплицируемая система управления базами данных (СУБД), разработанная компанией Google. Она предназначена для хранения и обработки транзакционных данных в масштабах планеты, обеспечивая при этом строгую согласованность данных (serializability) и высокую доступность, несмотря на географическую распределённость. Spanner является ключевым компонентом внутренней инфраструктуры Google, на базе которого работают такие сервисы, как Google Ads, Google Play, Gmail и Google Photos.
История
Разработка Spanner началась в Google в середине 2000-х годов как ответ на ограничения существовавших на тот момент распределённых систем хранения данных, в частности Bigtable и Megastore. Bigtable, хотя и обеспечивал высокую производительность и масштабируемость, не поддерживал полноценные транзакции и сложные запросы с соединениями (joins). Megastore, в свою очередь, предоставлял транзакционность и репликацию, но имел низкую производительность записи и был сложен в администрировании.
Spanner был задуман как система, объединяющая в себе преимущества обеих платформ: масштабируемость Bigtable и транзакционную семантику Megastore, с добавлением глобальной синхронизации времени. Первая публичная информация о проекте появилась в 2012 году, когда Google опубликовала научную статью «Spanner: Google’s Globally-Distributed Database» на конференции OSDI. В 2017 году Google анонсировала облачную версию Spanner, доступную для внешних клиентов через платформу Google Cloud Platform (GCP) под названием Cloud Spanner.
Архитектура и принципы работы
Spanner построен на нескольких ключевых архитектурных решениях, которые отличают его от других распределённых баз данных.
Глобальная репликация и согласованность
В отличие от традиционных СУБД, которые работают в пределах одного дата-центра, Spanner может реплицировать данные в десятки и сотни дата-центров по всему миру. Репликация осуществляется с использованием протокола консенсуса Paxos, который обеспечивает согласованность между репликами даже при сбоях отдельных узлов или сетевых разделах. Каждая единица данных (например, строка таблицы) хранится в группе Paxos, называемой «таблет» (tablet).
TrueTime API
Ключевой инновацией Spanner является использование TrueTime API — глобального сервиса синхронизации времени. TrueTime основан на комбинации атомных часов и GPS-приёмников, установленных в каждом дата-центре Google. Этот сервис предоставляет точное время с известной погрешностью (обычно от 1 до 10 миллисекунд). Spanner использует TrueTime для присвоения меток времени всем транзакциям, что позволяет реализовать внешнюю согласованность (external consistency) — то есть гарантировать, что порядок транзакций в системе соответствует реальному времени их выполнения. Благодаря TrueTime Spanner может выполнять распределённые транзакции с уровнем изоляции serializable без необходимости в централизованном координаторе.
Структура данных
Spanner хранит данные в реляционной модели, поддерживая таблицы, строки и столбцы. Каждая таблица может иметь первичный ключ, который определяет способ шардирования (разделения) данных. Данные автоматически распределяются по узлам кластера на основе диапазонов первичных ключей. Spanner поддерживает вторичные индексы, которые также реплицируются глобально, что обеспечивает быстрый доступ к данным по любому полю.
Транзакции
Spanner поддерживает полноценные ACID-транзакции (атомарность, согласованность, изоляция, долговечность). Транзакции могут быть как одноузловыми (затрагивающими один таблет), так и распределёнными (затрагивающими несколько таблетов, возможно, в разных дата-центрах). Для выполнения распределённых транзакций Spanner использует двухфазный протокол фиксации (2PC), который координируется с помощью TrueTime для обеспечения согласованности.
Классификация
Spanner относится к классу NewSQL — систем, которые стремятся сочетать масштабируемость NoSQL-решений с транзакционной семантикой традиционных реляционных СУБД. В отличие от многих NoSQL-систем, Spanner не жертвует согласованностью в пользу производительности, обеспечивая строгую согласованность на глобальном уровне. По типу хранения данных Spanner является гибридной системой: она поддерживает как реляционную модель (таблицы, SQL-запросы), так и модель «ключ-значение» (через API).
Характеристики
Производительность и масштабируемость
Spanner обеспечивает горизонтальное масштабирование: добавление новых узлов (машин) увеличивает ёмкость хранения и пропускную способность обработки запросов. Система способна обрабатывать миллионы транзакций в секунду при петабайтных объёмах данных. Задержки (latency) при записи данных в глобально реплицированную систему могут составлять от нескольких десятков до нескольких сотен миллисекунд, в зависимости от географического распределения реплик.
Доступность
Благодаря репликации данных в нескольких дата-центрах, Spanner обеспечивает высокую доступность (обычно 99,999% или выше). При отказе одного дата-центра система автоматически переключается на другие реплики без потери данных и без длительного простоя.
Безопасность
Spanner поддерживает шифрование данных как при передаче (TLS), так и при хранении (AES-256). В Cloud Spanner также доступна интеграция с системами управления доступом (IAM) Google Cloud, что позволяет настраивать детализированные права доступа к таблицам и строкам.
Применение
Внутренние сервисы Google
Spanner является основой для многих критически важных сервисов Google. Например, Google Ads использует Spanner для обработки рекламных транзакций в реальном времени, требующих высокой согласованности. Google Play применяет Spanner для хранения данных о покупках приложений и контента. Gmail и Google Photos также используют Spanner для хранения метаданных и пользовательских настроек.
Облачные решения
С 2017 года Spanner доступен как облачный сервис Cloud Spanner на платформе Google Cloud Platform. Cloud Spanner позволяет сторонним организациям использовать ту же технологию для создания глобально распределённых приложений. Типичные сценарии использования включают:
- Финансовые системы (обработка платежей, управление счетами).
- Игровые платформы (глобальные рейтинги, синхронизация игровых состояний).
- Розничная торговля (управление запасами, обработка заказов).
- Системы управления логистикой и цепочками поставок.
Критика и ограничения
Несмотря на свои преимущества, Spanner имеет ряд ограничений. Во-первых, система является проприетарной и недоступна для самостоятельного развёртывания (за исключением облачной версии). Это создаёт зависимость от инфраструктуры Google. Во-вторых, стоимость использования Cloud Spanner может быть высокой по сравнению с традиционными СУБД, особенно при небольших объёмах данных. В-третьих, использование TrueTime API требует специального оборудования (атомные часы, GPS-приёмники), что делает невозможным развёртывание Spanner в обычных дата-центрах без поддержки Google. Наконец, сложность настройки и администрирования распределённой системы может быть препятствием для небольших команд разработчиков.
Интересные факты
- Spanner был одной из первых коммерческих систем, реализовавших внешнюю согласованность на глобальном уровне с помощью аппаратной синхронизации времени.
- В 2012 году статья о Spanner получила награду «Best Paper Award» на конференции OSDI.
- По данным Google, Spanner обрабатывает более 2 миллиардов запросов в день от внутренних сервисов компании.
- TrueTime API, используемый в Spanner, имеет погрешность, которая публично документируется и варьируется от 1 до 10 миллисекунд в зависимости от условий.
Источники
- Corbett, J. C., Dean, J., Epstein, M., Fikes, A., Frost, C., Furman, J. J., ... & Woodford, D. (2012). Spanner: Google’s globally-distributed database. Proceedings of the 10th USENIX Symposium on Operating Systems Design and Implementation (OSDI).
- Google Cloud Documentation. (2023). Cloud Spanner Overview. Google Inc.
- Bailis, P., & Ghodsi, A. (2013). Eventual consistency today: Limitations, extensions, and beyond. Communications of the ACM, 56(2), 55-63.
- Stonebraker, M. (2012). NewSQL: An alternative to NoSQL and old SQL for new OLTP apps. Communications of the ACM, 55(7), 64-71.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →