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

DynamoDB Streams

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

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

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

С момента запуска функциональность неоднократно улучшалась. В 2018 году была добавлена поддержка записей о старых и новых образах элементов (настройка StreamViewType), что позволило получать полную картину изменений. В 2020 году Streams стала основой для DynamoDB Accelerator (DAX) и других сервисов, а также была интегрирована с AWS Lambda для бессерверной обработки событий.

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

Включение и настройка

Для использования DynamoDB Streams необходимо включить поток для конкретной таблицы. При включении задаётся тип информации, которая будет записываться в поток:

После включения поток автоматически начинает записывать изменения. Каждое изменение элемента таблицы генерирует одну запись в потоке. Поток хранит записи в течение 24 часов (по умолчанию), после чего они автоматически удаляются.

Структура потока

Поток состоит из шардов (shards), которые распределяют нагрузку и обеспечивают масштабируемость. Каждый шард содержит упорядоченную последовательность записей. Количество шардов автоматически управляется AWS и зависит от пропускной способности таблицы и объёма изменений. Каждая запись в потоке содержит:

Чтение из потока

Для чтения записей из DynamoDB Streams используются два основных подхода:

  1. AWS Lambda — наиболее распространённый способ. Можно настроить триггер Lambda, который будет автоматически вызываться при появлении новых записей в потоке. Lambda получает пакет записей (до 1000 или до 6 МБ) и обрабатывает их. Этот подход является бессерверным и масштабируется автоматически.
  2. API DynamoDB Streams — предоставляет низкоуровневые операции для чтения шардов и записей. Используется, когда требуется кастомная логика обработки, например, в приложениях на Java, Python или Go. Основные операции: DescribeStream, ListShards, GetShardIterator, GetRecords.

Применение

DynamoDB Streams широко используется в различных сценариях:

Событийно-ориентированная архитектура

Поток изменений служит источником событий для микросервисов. Например, при добавлении нового заказа в таблицу DynamoDB, Streams может запустить Lambda-функцию, которая отправляет уведомление клиенту по email или обновляет кэш в Redis.

Репликация данных между регионами

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

Интеграция с аналитическими системами

Изменения из Streams могут быть записаны в Amazon S3 (через Lambda или Kinesis Firehose) для последующего анализа с помощью Athena или Redshift. Например, можно собирать историю изменений цен на товары для построения отчётов.

Аудит и мониторинг

Поток позволяет фиксировать все изменения данных, что полезно для аудита. Записи можно отправлять в Amazon CloudWatch Logs или в Elasticsearch для поиска и визуализации.

Синхронизация с внешними системами

Streams используется для синхронизации данных DynamoDB с кэшами (например, Amazon ElastiCache), поисковыми индексами (Amazon OpenSearch Service) или реляционными базами данных (через AWS DMS).

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

Сравнение с другими сервисами

ХарактеристикаDynamoDB StreamsAmazon Kinesis Data StreamsAmazon SQS
Источник данныхИзменения в таблице DynamoDBЛюбые данные (логи, события)Сообщения от приложений
Срок хранения24 часаДо 365 днейДо 14 дней
Модель доставкиAt-least-onceAt-least-onceAt-most-once / At-least-once
УпорядоченностьВнутри шардаВнутри шардаНе гарантируется
Интеграция с LambdaВстроеннаяЧерез триггерЧерез триггер

DynamoDB Streams оптимизирован специально для работы с DynamoDB, в то время как Kinesis и SQS являются более универсальными сервисами.

Пример использования

Рассмотрим простой пример: интернет-магазин использует DynamoDB для хранения заказов. Когда клиент оформляет заказ, в таблицу добавляется новый элемент. Включённый Streams с типом NEW_IMAGE фиксирует этот заказ. Настроенная Lambda-функция считывает запись, извлекает email клиента и отправляет подтверждение заказа через Amazon SES. Если заказ позже обновляется (например, меняется статус), Streams генерирует новое событие MODIFY, и Lambda может отправить уведомление об изменении статуса.

Безопасность и управление доступом

Доступ к DynamoDB Streams управляется через AWS Identity and Access Management (IAM). Для чтения из потока требуются разрешения на операции dynamodb:DescribeStream, dynamodb:GetShardIterator и dynamodb:GetRecords. Для включения Streams на таблице необходимо разрешение dynamodb:UpdateTable. Рекомендуется использовать принцип наименьших привилегий.

Источники

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

На главную BFOmetr →