Streamování dat s DynamoDB

Developing Applications on AWS

Ricardo Sueiras

Principal Technologist

Základy DynamoDB Streams

 

základy

  • Reaguje na změny v databázi téměř v reálném čase.
  • Postaveno na principech event-driven architektury.
  • Každý insert, úprava nebo smazání generuje záznam streamu.
  • Reaktivní aplikace bez nutnosti pollingu tabulky.
  • Výchozí stav: zakázáno – aktivuj pomocí StreamSpecification.
  • Každý stream má vlastní ARN, odlišný od ARN tabulky.
Developing Applications on AWS

Doba uchování

 

uchování

  • Záznamy streamu se uchovávají po dobu 24 hodin.
    • Doba uchování je pevná a nelze ji konfigurovat.
  • Změna typu pohledu vyžaduje opětovné vytvoření streamu.
    • Nový stream získá nové ARN.
Developing Applications on AWS

Streams a jednotky čtecí kapacity DynamoDB

 

rcu

  • Čtení ze streamu NESPOTŘEBOVÁVÁ jednotky čtecí kapacity (RCU).
  • Aktivace streamů nemá vliv na zřízenou propustnost.
Developing Applications on AWS

Záznamy streamu

  • Každý záznam streamu obsahuje metadata popisující změnu.
  • Streams zachycují tři typy událostí:
    • INSERT
    • MODIFY
    • REMOVE

 

záznamy streamu

Developing Applications on AWS
  • Typ pohledu určuje, která data se zapíší do každého záznamu.
    • KEYS_ONLY: pouze partition key a sort key.
    • NEW_IMAGE: celá položka po změně.
    • OLD_IMAGE: celá položka před změnou.
    • NEW_AND_OLD_IMAGES: položka před změnou i po ní.
  • NEW_AND_OLD_IMAGES je volba pro auditování.
  • Vyžadováno pro DynamoDB Global Tables.

pohledy streamu

Developing Applications on AWS
  • Streams zachovávají pořadí v rámci partition key.
  • Lambda zpracovává záznamy v dávkách.
    • Po každé úspěšné dávce uloží checkpoint.
    • Neúspěšné dávky se opakují.
    • Opakování pokračují do úspěchu nebo vypršení záznamů.

 

řazení

Developing Applications on AWS

 

streams a aws lambda

  • Lambda je nejčastějším konzumentem streamu.
  • Využívá polling-based mapování zdroje událostí.
  • Čte záznamy ze streamu.
  • Volá tvou funkci s dávkami záznamů.
Developing Applications on AWS

Architektonický vzor

 

architektonické vzory

  • Typický end-to-end vzor:
    • Aktualizace položky se zapíše do DynamoDB.
    • Změna vygeneruje záznam streamu.
    • Záznam spustí Lambda pro zpracování.
Developing Applications on AWS

Škálování

 

škálování

  • Streams jsou interně rozděleny do shardů.
    • Podobně jako Kinesis Data Streams.
  • Každý shard umožňuje až dva souběžné konzumenty.
    • Překročení tohoto limitu je častou příčinou omezení čtení.
Developing Applications on AWS
  • Souběžnost Lambda se škáluje podle počtu shardů.
  • Zpracování ladíš pomocí:
    • BatchSize: maximální počet záznamů na volání.
    • MaximumBatchingWindow: čekání před odesláním neúplné dávky.
    • MaximumRetryAttempts: počet opakování před odesláním do cíle selhání.
    • MaximumRecordAgeInSeconds: zahazuje záznamy starší než tato hodnota.
    • ParallelizationFactor: souběžné zpracování na shard (max. 10).

škálování s lambda

Developing Applications on AWS

Filtrování a tumbling windows

  • Lambda podporuje filtrační kritéria.
    • Zahazuje záznamy před spuštěním funkce.
    • Snižuje zbytečná volání a náklady.
  • Lambda podporuje tumbling windows.
    • Agreguje stav napříč dávkami v shardu.

 

filtrování a tumbling windows

Developing Applications on AWS

Správa duplicitních záznamů

  • Streams zachytí každou změnu právě jednou.
  • Lambda zpracovává záznamy se sémantikou „alespoň jednou".
    • Opakování mohou zpracovat stejný záznam znovu.
  • Navrhuj konzumenty jako idempotentní.
  • Typický vzor: ukládej zpracované eventID nebo SequenceNumber.
    • Záznamy, které jsi už zpracoval/a, přeskoč.
    • Obě hodnoty zůstávají stabilní i při opakování.
    • Spolehlivé klíče idempotence.

 

správa duplicitních záznamů

Developing Applications on AWS

Řešení selhání

 

řešení selhání

  • ReportBatchItemFailures opakuje pouze záznamy, které selhaly.
  • Selhání Lambda řeš pomocí:
    • BisectBatchOnFunctionError pro rozdělení dávky.
    • Nastavení opakování.
    • Cílů selhání pro „otravné" dávky, které vyčerpají opakování.
Developing Applications on AWS

Integrace DynamoDB s Kinesis

 

integrace

  • Tabulky mohou odesílat změny přímo do Kinesis Data Streams.
    • Prostřednictvím funkce Kinesis Data Streams pro DynamoDB.
    • Samostatná, paralelní funkce – ne zřetězená.
    • Události NEPROCHÁZEJÍ přes DynamoDB Streams.
  • Obě funkce mohou běžet na stejné tabulce najednou.
    • Fungují nezávisle.
    • Podporují širší streaming a analytické architektury.
Developing Applications on AWS

Monitoring: časté problémy

 

řešení problémů

  • Časté provozní problémy, na které si dát pozor:
    • Přetížené partition klíče (hot partitions).
    • Neúspěšná opakování.
    • Duplicitní zpracování.
    • Throttling a zpoždění konzumentů.
Developing Applications on AWS

Monitoring: metriky CloudWatch

  • Klíčové metriky CloudWatch ke sledování:
    • Lambda Errors: odhalují chyby kódu nebo navazujících služeb.
    • IteratorAge: vysoké hodnoty signalizují pomalé konzumenty.
    • Metriky throttlingu: překračování limitů čtení.
    • Selhání zpracování dávek: záznamy odeslané do DLQ.

 

řešení problémů

Developing Applications on AWS

Zabezpečení

  • Přístup ke streamům je řízen oprávněními IAM.
  • Streams dědí nastavení šifrování tabulky.
    • Včetně šifrování v klidu na straně serveru pomocí KMS.
  • Uplatňuj politiku nejnižšího oprávnění pro konzumenty a navazující procesory.

 

zabezpečení

Developing Applications on AWS

Pojďme cvičit!

Developing Applications on AWS

Preparing Video For Download...