Streamingdata met DynamoDB

Toepassingen ontwikkelen op AWS

Ricardo Sueiras

Principal Technologist

DynamoDB Streams: basis

 

basisprincipes

  • Reageer bijna realtime op databasewijzigingen.
  • Gebaseerd op event-driven patronen.
  • Elke insert, wijziging of delete maakt een streamrecord.
  • Bouw reactieve apps zonder de tabel te pollen.
  • Standaard uit: inschakelen met StreamSpecification.
  • Elke stream heeft een eigen ARN, anders dan de tabel-ARN.
Toepassingen ontwikkelen op AWS

Retentieperiode

 

retentie

  • Streamrecords blijven 24 uur bewaard.
    • Retentie is vast en niet aanpasbaar.
  • De view type wijzigen betekent de stream opnieuw maken.
    • Een nieuwe stream krijgt een nieuwe stream-ARN.
Toepassingen ontwikkelen op AWS

Streams en DynamoDB read capacity units

 

rcu

  • Streamlezingen verbruiken GEEN read capacity units (RCU's).
  • Streams inschakelen heeft geen invloed op de geprovisioneerde throughput.
Toepassingen ontwikkelen op AWS

Streamrecords

  • Elk streamrecord bevat metadata over de wijziging.
  • Streams leggen drie eventtypen vast:
    • INSERT
    • MODIFY
    • REMOVE

 

streamrecords

Toepassingen ontwikkelen op AWS
  • View types bepalen welke data in elk record staat.
    • KEYS_ONLY: alleen de partition- en sorteringssleutel.
    • NEW_IMAGE: het volledige item na de wijziging.
    • OLD_IMAGE: het volledige item vóór de wijziging.
    • NEW_AND_OLD_IMAGES: het item voor en na.
  • NEW_AND_OLD_IMAGES is de standaard voor auditing.
  • Vereist voor DynamoDB Global Tables.

streamviews

Toepassingen ontwikkelen op AWS
  • Streams behouden volgorde per partitionsleutel.
  • Lambda verwerkt records in batches.
    • Checkpoint voortgang na elke geslaagde batch.
    • Mislukte batches worden opnieuw geprobeerd.
    • Retries gaan door tot succes of recordverval.

 

volgorde

Toepassingen ontwikkelen op AWS

 

streams en aws lambda

  • Lambda is de meest gebruikte stream-consumer.
  • Gebruikt een polling-gebaseerde event source mapping.
  • Leest records uit de stream.
  • Roept je functie aan met batches records.
Toepassingen ontwikkelen op AWS

Architectuurpatroon

 

architectuurpatronen

  • Een veelvoorkomend end-to-end patroon:
    • Een itemupdate komt in DynamoDB.
    • De wijziging maakt een streamrecord.
    • Het record triggert Lambda voor verwerking.
Toepassingen ontwikkelen op AWS

Schalen

 

schalen

  • Streams zijn intern opgedeeld in shards.
    • Net als Kinesis Data Streams.
  • Elke shard staat maximaal twee gelijktijdige consumers toe.
    • Deze limiet overschrijden veroorzaakt vaak read throttling.
Toepassingen ontwikkelen op AWS
  • Lambda-concurrency schaalt met het aantal shards.
  • Stem verwerking af met:
    • BatchSize: max. records per aanroep.
    • MaximumBatchingWindow: wachten vóór een gedeeltelijke batch.
    • MaximumRetryAttempts: retries vóór failuredestination.
    • MaximumRecordAgeInSeconds: negeer te oude records.
    • ParallelizationFactor: gelijktijdige verwerking per shard (max. 10).

schalen met lambda

Toepassingen ontwikkelen op AWS

Filteren en tumbling windows

  • Lambda ondersteunt filtercriteria.
    • Verwerp records vóór de functieaanroep.
    • Vermindert onnodige aanroepen en kosten.
  • Lambda ondersteunt tumbling windows.
    • Agregeer state over batches binnen een shard.

 

filteren en tumbling windows

Toepassingen ontwikkelen op AWS

Dubbele records beheren

  • Streams leggen elke wijziging exact één keer vast.
  • Lambda verwerkt records met at-least-once-semantiek.
    • Retries kunnen hetzelfde record herverwerken.
  • Ontwerp consumers idempotent.
  • Een veelgebruikte aanpak: sla verwerkte eventID of SequenceNumber op.
    • Sla records over die je al hebt verwerkt.
    • Beide blijven stabiel bij retries.
    • Betrouwbare idempotency keys.

 

dubbele records beheren

Toepassingen ontwikkelen op AWS

Omgaan met fouten

 

omgaan met fouten

  • ReportBatchItemFailures retryt alleen mislukte records.
  • Handel Lambda-fouten af met:
    • BisectBatchOnFunctionError voor batchbisectie.
    • Retry-instellingen.
    • Failuredestinations voor poison batches na uitgeputte retries.
Toepassingen ontwikkelen op AWS

DynamoDB- naar Kinesis-integratie

 

integratie

  • Tabellen kunnen wijzigingen direct naar Kinesis Data Streams pushen.
    • Via de functie Kinesis Data Streams for DynamoDB.
    • Een aparte, parallelle mogelijkheid, geen keten.
    • Events gaan NIET via DynamoDB Streams.
  • Beide kunnen tegelijk op dezelfde tabel draaien.
    • Ze werken onafhankelijk.
    • Voedt bredere streaming- en analytics-architecturen.
Toepassingen ontwikkelen op AWS

Monitoring: veelvoorkomende issues

 

problemen oplossen

  • Veelvoorkomende operationele issues om op te letten:
    • Heete partitions.
    • Mislukte retries.
    • Dubbele verwerking.
    • Throttling en consumentenachterstand.
Toepassingen ontwikkelen op AWS

Monitoring: CloudWatch-metrics

  • Belangrijke CloudWatch-metrics om te monitoren:
    • Lambda Errors: toont code- of downstreamproblemen.
    • IteratorAge: hoge waarden duiden op trage consumers.
    • Throttling-metrics: overschreden read-limieten.
    • Batchverwerkingsfouten: records naar een DLQ.

 

problemen oplossen

Toepassingen ontwikkelen op AWS

Beveiliging

  • Toegang tot streams wordt geregeld met IAM-rechten.
  • Streams erven de encryptie-instellingen van de tabel.
    • Inclusief server-side-encryptie at rest met KMS.
  • Pas least-privilege-beleid toe op consumers en downstream-processors.

 

beveiliging

Toepassingen ontwikkelen op AWS

Laten we oefenen!

Toepassingen ontwikkelen op AWS

Preparing Video For Download...