Date în flux cu DynamoDB

Dezvoltarea aplicațiilor pe AWS

Ricardo Sueiras

Principal Technologist

Elementele de bază ale DynamoDB Streams

 

fundamentals

  • Reacționează la modificările din baza de date în timp aproape real.
  • Bazat pe tipare event-driven.
  • Fiecare inserare, modificare sau ștergere generează un stream record.
  • Construiește aplicații reactive fără polling pe tabel.
  • Dezactivat implicit: activează cu StreamSpecification.
  • Fiecare stream are propriul ARN, distinct de ARN-ul tabelului.
Dezvoltarea aplicațiilor pe AWS

Perioada de retenție

 

retention

  • Stream records sunt reținute timp de 24 de ore.
    • Perioada de retenție este fixă și nu poate fi configurată.
  • Schimbarea tipului de view presupune recrearea stream-ului.
    • Un stream nou generează un ARN nou.
Dezvoltarea aplicațiilor pe AWS

Streams și unitățile de capacitate de citire DynamoDB

 

rcu

  • Citirile din stream NU consumă unitățile de capacitate de citire (RCU).
  • Activarea stream-urilor nu afectează throughput-ul provizionat.
Dezvoltarea aplicațiilor pe AWS

Stream records

  • Fiecare stream record conține metadate care descriu modificarea.
  • Streams captează trei tipuri de evenimente:
    • INSERT
    • MODIFY
    • REMOVE

 

stream records

Dezvoltarea aplicațiilor pe AWS
  • Tipurile de view controlează ce date ajung în fiecare record.
    • KEYS_ONLY: doar cheia de partiție și cea de sortare.
    • NEW_IMAGE: elementul complet după modificare.
    • OLD_IMAGE: elementul complet înainte de modificare.
    • NEW_AND_OLD_IMAGES: elementul înainte și după.
  • NEW_AND_OLD_IMAGES este opțiunea standard pentru audit.
  • Necesar pentru DynamoDB Global Tables.

stream views

Dezvoltarea aplicațiilor pe AWS
  • Streams păstrează ordinea per cheie de partiție.
  • Lambda procesează records în loturi.
    • Salvează progresul după fiecare lot reușit.
    • Loturile eșuate sunt reluate.
    • Reluările continuă până la succes sau expirarea records.

 

ordering

Dezvoltarea aplicațiilor pe AWS

 

streams and aws lambda

  • Lambda este cel mai frecvent consumator de stream.
  • Folosește un event source mapping bazat pe polling.
  • Citește records din stream.
  • Invocă funcția cu loturi de records.
Dezvoltarea aplicațiilor pe AWS

Tipar arhitectural

 

arch patterns

  • Un tipar end-to-end frecvent:
    • Un element este actualizat în DynamoDB.
    • Modificarea generează un stream record.
    • Record-ul declanșează Lambda pentru procesare.
Dezvoltarea aplicațiilor pe AWS

Scalare

 

scaling

  • Streams sunt împărțite intern în shard-uri.
    • Similar cu Kinesis Data Streams.
  • Fiecare shard permite până la doi consumatori simultan.
    • Depășirea acestei limite este o cauză frecventă de throttling la citire.
Dezvoltarea aplicațiilor pe AWS
  • Concurența Lambda se scalează odată cu numărul de shard-uri.
  • Ajustează procesarea cu:
    • BatchSize: numărul maxim de records per invocare.
    • MaximumBatchingWindow: timp de așteptare pentru un lot parțial.
    • MaximumRetryAttempts: reluări înainte de destinația de eșec.
    • MaximumRecordAgeInSeconds: elimină records mai vechi decât această valoare.
    • ParallelizationFactor: procesare concurentă per shard (max 10).

scaling with lambda

Dezvoltarea aplicațiilor pe AWS

Filtrare și tumbling windows

  • Lambda suportă criterii de filtrare.
    • Elimină records înainte de invocarea funcției.
    • Reduce invocările inutile și costurile.
  • Lambda suportă tumbling windows.
    • Agregă starea pe loturi dintr-un shard.

 

filtering and tumbling windows

Dezvoltarea aplicațiilor pe AWS

Gestionarea records duplicate

  • Streams captează fiecare modificare exact o dată.
  • Lambda procesează records cu semantică at-least-once.
    • Reluările pot reprocesa același record.
  • Proiectează consumatorii să fie idempotenți.
  • Un tipar frecvent: stochează eventID sau SequenceNumber procesate.
    • Ignoră records deja procesate.
    • Ambele rămân stabile la reluări.
    • Chei de idempotență fiabile.

 

managing duplicate records

Dezvoltarea aplicațiilor pe AWS

Gestionarea eșecurilor

 

handling failures

  • ReportBatchItemFailures reia doar records eșuate.
  • Gestionează eșecurile Lambda cu:
    • BisectBatchOnFunctionError pentru bisectarea lotului.
    • Controale de reluare.
    • Destinații de eșec pentru loturi care epuizează reluările.
Dezvoltarea aplicațiilor pe AWS

Integrarea DynamoDB cu Kinesis

 

integration

  • Tabelele pot trimite modificări direct către Kinesis Data Streams.
    • Prin funcționalitatea Kinesis Data Streams for DynamoDB.
    • O capabilitate separată și paralelă, nu înlănțuită.
    • Evenimentele NU trec prin DynamoDB Streams.
  • Ambele pot rula simultan pe același tabel.
    • Funcționează independent.
    • Alimentează arhitecturi mai largi de streaming și analiză.
Dezvoltarea aplicațiilor pe AWS

Monitorizare: probleme frecvente

 

troubleshooting

  • Probleme operaționale frecvente de urmărit:
    • Partiții suprasolicitate.
    • Reluări eșuate.
    • Procesare duplicată.
    • Throttling și întârzieri ale consumatorilor.
Dezvoltarea aplicațiilor pe AWS

Monitorizare: metrici CloudWatch

  • Metrici CloudWatch esențiale de monitorizat:
    • Lambda Errors: semnalează probleme de cod sau downstream.
    • IteratorAge: valori mari indică consumatori lenți.
    • Metrici de throttling: limite de citire depășite.
    • Eșecuri la procesarea loturilor: records trimise într-un DLQ.

 

troubleshooting

Dezvoltarea aplicațiilor pe AWS

Securitate

  • Accesul la streams este controlat prin permisiuni IAM.
  • Streams moștenesc setările de criptare ale tabelului.
    • Inclusiv criptarea server-side at rest cu KMS.
  • Aplică politici cu privilegii minime pentru consumatori și procesoare downstream.

 

security

Dezvoltarea aplicațiilor pe AWS

Hai să exersăm!

Dezvoltarea aplicațiilor pe AWS

Preparing Video For Download...