Потоковая передача данных с DynamoDB

Разработка приложений на AWS

Ricardo Sueiras

Principal Technologist

Основы DynamoDB Streams

 

fundamentals

  • Реагируйте на изменения в базе данных практически в реальном времени.
  • Основано на событийных паттернах.
  • Каждая операция вставки, изменения или удаления создаёт запись потока.
  • Реактивные приложения без опроса таблицы.
  • По умолчанию отключено: включается через StreamSpecification.
  • У каждого потока свой ARN, отличный от ARN таблицы.
Разработка приложений на AWS

Срок хранения

 

retention

  • Записи потока хранятся 24 часа.
    • Срок хранения фиксирован и не настраивается.
  • Изменение типа представления требует пересоздания потока.
    • Новый поток получает новый ARN.
Разработка приложений на AWS

Потоки и единицы ёмкости чтения DynamoDB

 

rcu

  • Чтение потока НЕ расходует единицы ёмкости чтения (RCU).
  • Включение потоков не влияет на выделенную пропускную способность.
Разработка приложений на AWS

Записи потока

  • Каждая запись потока содержит метаданные об изменении.
  • Потоки фиксируют три типа событий:
    • INSERT
    • MODIFY
    • REMOVE

 

stream records

Разработка приложений на AWS
  • Типы представлений определяют, какие данные попадают в каждую запись.
    • KEYS_ONLY: только ключ раздела и ключ сортировки.
    • NEW_IMAGE: полный элемент после изменения.
    • OLD_IMAGE: полный элемент до изменения.
    • NEW_AND_OLD_IMAGES: элемент до и после изменения.
  • NEW_AND_OLD_IMAGES — основной вариант для аудита.
  • Обязателен для глобальных таблиц DynamoDB.

stream views

Разработка приложений на AWS
  • Потоки сохраняют порядок записей в пределах ключа раздела.
  • Lambda обрабатывает записи пакетами.
    • Прогресс фиксируется после каждого успешного пакета.
    • Неудачные пакеты повторяются.
    • Повторы продолжаются до успеха или истечения срока хранения.

 

ordering

Разработка приложений на AWS

 

streams and aws lambda

  • Lambda — наиболее распространённый потребитель потока.
  • Использует маппинг источника событий на основе опроса.
  • Читает записи из потока.
  • Вызывает вашу функцию с пакетами записей.
Разработка приложений на AWS

Архитектурный паттерн

 

arch patterns

  • Типичный сквозной паттерн:
    • Элемент обновляется в DynamoDB.
    • Изменение создаёт запись в потоке.
    • Запись запускает Lambda для обработки.
Разработка приложений на AWS

Масштабирование

 

scaling

  • Потоки внутренне разделены на шарды.
    • Аналогично Kinesis Data Streams.
  • Каждый шард допускает до двух одновременных потребителей.
    • Превышение этого лимита — частая причина троттлинга чтения.
Разработка приложений на AWS
  • Параллелизм Lambda масштабируется вместе с количеством шардов.
  • Настройте обработку с помощью:
    • BatchSize: максимальное число записей на вызов.
    • MaximumBatchingWindow: ожидание перед отправкой неполного пакета.
    • MaximumRetryAttempts: повторы до отправки в назначение ошибок.
    • MaximumRecordAgeInSeconds: отбрасывание устаревших записей.
    • ParallelizationFactor: параллельная обработка на шард (макс. 10).

scaling with lambda

Разработка приложений на AWS

Фильтрация и скользящие окна

  • Lambda поддерживает критерии фильтрации.
    • Отбрасывает записи до вызова функции.
    • Сокращает лишние вызовы и затраты.
  • Lambda поддерживает скользящие окна.
    • Накопление состояния по пакетам в пределах шарда.

 

filtering and tumbling windows

Разработка приложений на AWS

Управление дублирующимися записями

  • Потоки фиксируют каждое изменение ровно один раз.
  • Lambda обрабатывает записи с семантикой «хотя бы один раз».
    • Повторы могут привести к повторной обработке одной записи.
  • Проектируйте потребителей идемпотентными.
  • Распространённый паттерн: сохраняйте обработанный eventID или SequenceNumber.
    • Пропускайте уже обработанные записи.
    • Оба значения стабильны при повторах.
    • Надёжные ключи идемпотентности.

 

managing duplicate records

Разработка приложений на AWS

Обработка сбоев

 

handling failures

  • ReportBatchItemFailures повторяет только неудачные записи.
  • Для обработки сбоев Lambda используйте:
    • BisectBatchOnFunctionError для разбиения пакета пополам.
    • Управление повторами.
    • Назначения ошибок для «отравленных» пакетов, исчерпавших повторы.
Разработка приложений на AWS

Интеграция DynamoDB с Kinesis

 

integration

  • Таблицы могут напрямую отправлять изменения в Kinesis Data Streams.
    • Через функцию Kinesis Data Streams для DynamoDB.
    • Отдельная параллельная возможность, не связанная цепочкой.
    • События НЕ проходят через DynamoDB Streams.
  • Оба механизма могут работать на одной таблице одновременно.
    • Они функционируют независимо.
    • Обеспечивают более широкие потоковые и аналитические архитектуры.
Разработка приложений на AWS

Мониторинг: типичные проблемы

 

troubleshooting

  • Типичные операционные проблемы:
    • Горячие разделы.
    • Неудачные повторы.
    • Повторная обработка записей.
    • Троттлинг и отставание потребителей.
Разработка приложений на AWS

Мониторинг: метрики CloudWatch

  • Ключевые метрики CloudWatch для мониторинга:
    • Lambda Errors: ошибки кода или зависимых сервисов.
    • IteratorAge: высокие значения указывают на медленных потребителей.
    • Метрики троттлинга: превышение лимитов чтения.
    • Сбои обработки пакетов: записи, отправленные в DLQ.

 

troubleshooting

Разработка приложений на AWS

Безопасность

  • Доступ к потокам контролируется разрешениями IAM.
  • Потоки наследуют настройки шифрования таблицы.
    • Включая серверное шифрование в состоянии покоя с KMS.
  • Применяйте политики минимальных привилегий к потребителям и обработчикам.

 

security

Разработка приложений на AWS

Давайте потренируемся!

Разработка приложений на AWS

Preparing Video For Download...