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

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

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

История и развитие

Функция глобальных таблиц была анонсирована Amazon Web Services в ноябре 2017 года на конференции re:Invent. Первоначально она была реализована на основе технологии потоков DynamoDB Streams и лямбда-функций AWS Lambda, которые обеспечивали репликацию изменений между регионами. В 2019 году была выпущена вторая версия глобальных таблиц (Global Tables Version 2), которая отказалась от использования Lambda в пользу встроенного механизма репликации на стороне сервера. Это значительно упростило архитектуру, повысило производительность и снизило задержки репликации. Вторая версия стала стандартной и единственной поддерживаемой с 2020 года.

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

Мультиактивная репликация

Глобальные таблицы DynamoDB реализуют модель мультиактивной (multi-master) репликации. В отличие от традиционных решений с одним ведущим узлом (master-slave), где запись возможна только в один регион, в глобальных таблицах каждый регион является равноправным. Приложения могут выполнять операции чтения и записи в любой из регионов, входящих в состав глобальной таблицы. Изменения, внесённые в одном регионе, автоматически асинхронно реплицируются во все остальные регионы.

Потоки и репликация

В основе репликации лежит механизм DynamoDB Streams. Каждое изменение элемента таблицы (создание, обновление, удаление) записывается в поток изменений региона. Служба глобальных таблиц считывает этот поток и воспроизводит изменения в целевых регионах. Репликация происходит в фоновом режиме, обычно в течение нескольких секунд, но может занимать больше времени при высокой нагрузке или сетевых задержках. DynamoDB гарантирует доставку изменений в конечном счёте (eventual consistency), но не гарантирует глобальный порядок репликации.

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

При одновременной записи одного и того же элемента в разных регионах возникает конфликт. DynamoDB использует стратегию разрешения конфликтов на основе меток времени (last writer wins — LWW, «победитель — последний пишущий»). При конфликте система сравнивает временные метки операций (на основе часов серверов AWS, синхронизированных по NTP) и выбирает запись с более поздней меткой. Разработчик не может повлиять на этот алгоритм. Для более сложных сценариев (например, объединение данных) необходимо реализовывать дополнительную логику на стороне приложения.

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

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

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

Согласованность данных

DynamoDB поддерживает два уровня согласованности чтения: eventually consistent (в конечном счёте согласованное) и strongly consistent (строго согласованное). Для глобальных таблиц строго согласованное чтение возможно только в том регионе, где была произведена последняя запись, и только если репликация ещё не завершилась. В других регионах доступно только eventually consistent чтение, которое может не отражать самых последних изменений. Это фундаментальное ограничение распределённых систем (теорема CAP).

Доступность и отказоустойчивость

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

Стоимость

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

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

Применение

Глобальные таблицы DynamoDB используются в сценариях, требующих низкой задержки доступа к данным для пользователей, распределённых по всему миру, или высокой отказоустойчивости. Типичные примеры:

  • Мультирегиональные веб-приложения и мобильные сервисы (например, социальные сети, игровые платформы, сервисы доставки), где пользователи из разных стран должны видеть актуальные данные без задержек.
  • Глобальные системы управления сессиями и пользовательскими профилями.
  • Каталоги товаров и контент для международных интернет-магазинов.
  • Системы аварийного восстановления (disaster recovery), где требуется быстрое переключение между регионами с минимальной потерей данных.
  • Приложения Интернета вещей (IoT), собирающие данные с устройств, разбросанных по разным континентам.

Ограничения и особенности

  • Максимальное количество регионов: глобальная таблица может включать до 32 регионов AWS.
  • Имена таблиц: все таблицы, входящие в глобальную, должны иметь одинаковое имя и первичный ключ.
  • Не поддерживаются: глобальные вторичные индексы (GSI) и локальные вторичные индексы (LSI) с разными настройками в разных регионах — они должны быть идентичны.
  • Транзакции: транзакции DynamoDB (TransactWriteItems, TransactGetItems) не поддерживаются в глобальных таблицах. Транзакция выполняется только в пределах одного региона.
  • Удаление таблицы: удаление глобальной таблицы требует удаления всех её реплик в каждом регионе.
  • Согласованность: как указано выше, строгая согласованность доступна только в регионе последней записи.

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

Глобальные таблицы DynamoDB являются проприетарным решением AWS. Среди альтернатив для мультирегиональной репликации в NoSQL-базах данных можно выделить:

  • Google Cloud Spannerреляционная база данных с глобальной репликацией и сильной согласованностью, но другой моделью данных и ценой.
  • MongoDB Atlas — предоставляет мультирегиональные кластеры с мультиактивной репликацией, но с другим подходом к разрешению конфликтов.
  • Cassandra / ScyllaDB — открытые распределённые базы данных с поддержкой мультирегиональной репликации, но требующие самостоятельного администрирования.

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

  • Глобальные таблицы DynamoDB используются в таких крупных сервисах, как Netflix, Airbnb, Snapchat, Lyft и многих других.
  • При миграции с первой версии глобальных таблиц на вторую требовалось пересоздать таблицы, так как архитектура репликации изменилась принципиально.
  • AWS не раскрывает точные алгоритмы синхронизации часов для разрешения конфликтов, но использует собственные NTP-серверы.

Источники

  • Amazon DynamoDB Developer Guide: Global Tables
  • AWS re:Invent 2017: Launch of DynamoDB Global Tables
  • AWS re:Invent 2019: DynamoDB Global Tables Version 2 announcement
  • AWS Documentation: DynamoDB Streams
  • AWS Documentation: DynamoDB Consistency Models
  • AWS Well-Architected Framework: Reliability Pillar
  • Case studies: Netflix, Airbnb, Snapchat engineering blogs

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

На главную BFOmetr →