Потоки даних у DynamoDB

Розроблення застосунків на AWS

Ricardo Sueiras

Principal Technologist

Основи DynamoDB Streams

 

основи

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

Період зберігання

 

період зберігання

  • Записи потоку зберігаються 24 години.
    • Період фіксований і не налаштовується.
  • Зміна типу подання вимагає пересоздати потік.
    • Новий потік отримує новий ARN потоку.
Розроблення застосунків на AWS

Потоки й одиниці читання DynamoDB

 

rcu

  • Читання з потоку НЕ споживають ваші одиниці читання (RCU).
  • Увімкнення потоків не впливає на виділену пропускну здатність.
Розроблення застосунків на AWS

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

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

 

записи потоку

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

подання потоку

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

 

упорядкування

Розроблення застосунків на AWS

 

потоки та aws lambda

  • Lambda — найпоширеніший споживач потоку.
  • Використовує прив'язку джерела подій на основі опитування.
  • Читає записи з потоку.
  • Викликає вашу функцію пакетами записів.
Розроблення застосунків на AWS

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

 

архітектурні патерни

  • Типовий наскрізний патерн:
    • Оновлення елемента потрапляє в DynamoDB.
    • Зміна генерує запис потоку.
    • Запис тригерить Lambda для обробки.
Розроблення застосунків на AWS

Масштабування

 

масштабування

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

масштабування з lambda

Розроблення застосунків на AWS

Фільтрування і tumbling-вікна

  • Lambda підтримує фільтри.
    • Відкидайте записи до виклику функції.
    • Менше зайвих викликів і нижча вартість.
  • Lambda підтримує ковзні вікна з фіксованою довжиною (tumbling).
    • Агрегуйте стан між пакетами в межах шарду.

 

фільтрування і tumbling-вікна

Розроблення застосунків на AWS

Керування дублями

  • Потоки фіксують кожну зміну рівно один раз.
  • Lambda обробляє записи з гарантією принаймні один раз.
    • Повтори можуть перезапустити той самий запис.
  • Проєктуйте споживачів ідемпотентними.
  • Поширений підхід: зберігати оброблений eventID або SequenceNumber.
    • Пропускайте записи, які вже опрацювали.
    • Обидва стабільні під час повторів.
    • Надійні ключі ідемпотентності.

 

керування дублями

Розроблення застосунків на AWS

Обробка збоїв

 

обробка збоїв

  • ReportBatchItemFailures повторює лише записи з помилкою.
  • Обробляйте збої Lambda за допомогою:
    • BisectBatchOnFunctionError для поділу пакета.
    • Налаштувань повторів.
    • Призначень для збоїв для «отруйних» пакетів після вичерпання повторів.
Розроблення застосунків на AWS

Інтеграція DynamoDB з Kinesis

 

інтеграція

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

Моніторинг: типові проблеми

 

усунення проблем

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

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

  • Ключові метрики CloudWatch для моніторингу:
    • Lambda Errors: вказують на проблеми в коді чи нижче за потоками.
    • IteratorAge: великі значення означають повільних споживачів.
    • Метрики throttling: перевищення лімітів читання.
    • Збої пакетної обробки: записи, надіслані до DLQ.

 

усунення проблем

Розроблення застосунків на AWS

Безпека

  • Доступ до потоків контролюється дозволами IAM.
  • Потоки успадковують шифрування таблиці.
    • Включно з шифруванням на боці сервера (at rest) через KMS.
  • Застосовуйте політики найменших привілеїв для споживачів і нижчих процесорів.

 

безпека

Розроблення застосунків на AWS

Давайте потренуємось!

Розроблення застосунків на AWS

Preparing Video For Download...