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

Глобальные таблицы

Глобальные таблицы (англ. Global Tables) — это распределённая система хранения и репликации данных, предоставляемая сервисом Amazon DynamoDB (Amazon Web Services, AWS), которая позволяет автоматически синхронизировать содержимое таблиц баз данных между несколькими географически удалёнными регионами AWS. Глобальные таблицы обеспечивают многорегиональную запись и чтение с низкой задержкой, что делает их ключевым инструментом для построения отказоустойчивых и масштабируемых приложений, работающих в глобальном масштабе.

История

Концепция глобальных таблиц была представлена компанией Amazon Web Services в ноябре 2017 года на конференции re:Invent. До этого DynamoDB поддерживал только однорегиональные таблицы, что ограничивало возможности создания глобально распределённых приложений. Внедрение глобальных таблиц стало ответом на растущий спрос со стороны крупных интернет-компаний, которым требовалась низкая задержка доступа к данным для пользователей из разных частей света, а также высокая отказоустойчивость в случае сбоя целого региона AWS.

Первоначально глобальные таблицы поддерживали репликацию только в режиме «активный-активный» (multi-master), когда запись могла производиться в любой регион, а изменения автоматически распространялись на все остальные регионы. В 2019 году функциональность была расширена: появилась поддержка глобальных вторичных индексов (Global Secondary Indexes, GSI) на реплицированных таблицах, а также улучшена производительность репликации. В 2021 году была добавлена возможность использования глобальных таблиц с шифрованием на стороне сервера и управляемыми ключами AWS KMS.

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

Репликация данных

Глобальные таблицы основаны на механизме асинхронной репликации с использованием потоков изменений DynamoDB Streams. Когда в одной из таблиц-реплик происходит запись (вставка, обновление или удаление элемента), запись фиксируется в локальной таблице, а затем информация об изменении помещается в поток. AWS автоматически распространяет это изменение на все остальные регионы, входящие в состав глобальной таблицы. Репликация происходит в течение нескольких секунд (обычно менее одной секунды), что обеспечивает конечную согласованность (eventual consistency) данных.

Конфликты и разрешение

Поскольку глобальные таблицы позволяют записывать данные в любой регион, возможны конфликты, когда один и тот же элемент (с одинаковым первичным ключом) одновременно изменяется в двух разных регионах. Для разрешения таких конфликтов DynamoDB использует стратегию «последний пишущий побеждает» (Last Writer Wins, LWW). При обнаружении конфликта система сравнивает временные метки изменений (timestamp) и выбирает запись с более поздней меткой. Если временные метки совпадают, конфликт разрешается на основе порядка, в котором изменения были получены потоком репликации. Разработчик может также настроить пользовательскую логику разрешения конфликтов, используя AWS Lambda-функции, которые вызываются при обнаружении конфликта.

Глобальные вторичные индексы

Глобальные таблицы поддерживают глобальные вторичные индексы (GSI), которые реплицируются вместе с основными данными. Это означает, что запросы к GSI могут выполняться в любом регионе, где развёрнута реплика таблицы. Однако важно учитывать, что GSI также подчиняются конечной согласованности, и данные в индексе могут отставать от основных данных на несколько секунд.

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

Многорегиональная запись

Главное преимущество глобальных таблиц — возможность записи данных в любой из регионов, входящих в состав глобальной таблицы. Это позволяет приложениям обрабатывать запросы пользователей из ближайшего к ним региона, минимизируя задержки. Например, пользователь из Европы может записывать данные в регион eu-west-1 (Ирландия), а пользователь из Азии — в регион ap-northeast-1 (Токио), и обе записи будут автоматически синхронизированы.

Отказоустойчивость

Глобальные таблицы обеспечивают высокую доступность данных. Если один регион AWS выходит из строя, приложение может автоматически переключиться на другой регион, где хранится реплика данных. Это делает глобальные таблицы важным инструментом для построения аварийно-устойчивых архитектур (Disaster Recovery).

Производительность

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

Стоимость

Использование глобальных таблиц увеличивает стоимость по сравнению с однорегиональными таблицами. Плата взимается за:

  • Хранение данных в каждом регионе (репликации).
  • Пропускную способность на запись и чтение в каждом регионе.
  • Использование DynamoDB Streams для репликации.
  • Трафик между регионами (межрегиональный обмен данными).

Применение

Глобальные веб-приложения

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

Игровая индустрия

Многопользовательские онлайн-игры требуют низкой задержки для синхронизации состояния игрового мира, данных игроков и их достижений. Глобальные таблицы позволяют хранить эти данные в нескольких регионах, чтобы игроки из разных стран могли взаимодействовать без заметных задержек.

Финансовые и банковские системы

Для финансовых приложений, работающих в глобальном масштабе, критически важна отказоустойчивость и согласованность данных. Глобальные таблицы используются для хранения информации о транзакциях, балансах счетов и клиентских данных, обеспечивая возможность быстрого переключения между регионами в случае сбоя.

Социальные сети и мессенджеры

Платформы социальных сетей и мессенджеры (например, Snapchat, как сообщалось в отчётах AWS) используют глобальные таблицы для хранения сообщений, лент новостей и профилей пользователей, чтобы обеспечить низкую задержку доставки контента.

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

Конечная согласованность

Главное ограничение глобальных таблиц — конечная согласованность данных. Это означает, что после записи в одном регионе может пройти некоторое время (обычно доли секунды, но в редких случаях до нескольких секунд), прежде чем изменение станет видимым в других регионах. Для приложений, требующих строгой согласованности (например, банковские переводы с немедленным списанием), это может быть неприемлемо. В таких случаях рекомендуется использовать однорегиональные таблицы или применять дополнительные механизмы блокировок.

Сложность разрешения конфликтов

Стратегия «последний пишущий побеждает» может приводить к потере данных, если два пользователя одновременно изменяют один и тот же элемент в разных регионах. Разработчикам необходимо проектировать приложения с учётом этой особенности, например, используя условные обновления или пользовательские функции разрешения конфликтов.

Высокая стоимость

Из-за необходимости хранения нескольких копий данных и межрегионального трафика глобальные таблицы могут быть значительно дороже однорегиональных. Для небольших проектов это может быть неоправданно.

Зависимость от AWS

Глобальные таблицы являются проприетарной технологией Amazon Web Services. Переход на другую облачную платформу или локальное развёртывание потребует полной переработки архитектуры хранения данных.

Сравнение с альтернативами

Google Cloud Spanner

Google Cloud Spanner — это глобально распределённая реляционная база данных, которая, в отличие от глобальных таблиц DynamoDB, обеспечивает строгую согласованность (strong consistency) и поддерживает SQL-запросы. Однако Spanner сложнее в настройке и дороже для небольших объёмов данных.

Azure Cosmos DB

Azure Cosmos DB — это глобально распределённая NoSQL-база данных от Microsoft, которая также поддерживает многорегиональную запись и чтение. Cosmos DB предлагает несколько моделей согласованности, включая строгую, и поддерживает различные API (SQL, MongoDB, Cassandra). В отличие от DynamoDB, Cosmos DB не привязан к одному типу хранилища (ключ-значение).

CockroachDB

CockroachDB — это открытая распределённая SQL-база данных, которая может быть развёрнута как в облаке, так и на собственных серверах. Она обеспечивает строгую согласованность и автоматическую репликацию данных между регионами. Однако CockroachDB требует больше административных усилий по сравнению с управляемыми облачными сервисами.

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

  • Глобальные таблицы DynamoDB используются в таких крупных проектах, как Snapchat, Lyft, Netflix и Airbnb.
  • В 2020 году AWS объявила, что глобальные таблицы поддерживают репликацию в до 16 регионов одновременно.
  • Для обеспечения безопасности данных все репликации между регионами шифруются с использованием протокола TLS.
  • В 2022 году была добавлена поддержка глобальных таблиц с резервным копированием (point-in-time recovery), что позволяет восстанавливать данные на любой момент времени в течение последних 35 дней.

Источники

  • Amazon DynamoDB Developer Guide: «Global Tables: Multi-Region Replication with DynamoDB»
  • AWS re:Invent 2017: «Introducing Amazon DynamoDB Global Tables»
  • AWS re:Invent 2019: «DynamoDB advanced design patterns»
  • Документация Amazon Web Services: «Global Tables: Best Practices»
  • Статья «DynamoDB Global Tables: How They Work» на сайте AWS Architecture Blog
  • Отчёты AWS о производительности и задержках глобальных таблиц

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

На главную BFOmetr →