Глобальные таблицы 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 →