Streaming data dengan DynamoDB

Mengembangkan Aplikasi di AWS

Ricardo Sueiras

Principal Technologist

Dasar-dasar DynamoDB Streams

 

dasar-dasar

  • Tanggapi perubahan basis data hampir real time.
  • Dibangun pada pola event-driven.
  • Setiap insert, modify, atau delete membuat catatan stream.
  • Bangun aplikasi reaktif tanpa polling tabel.
  • Nonaktif secara default: aktifkan dengan StreamSpecification.
  • Tiap stream punya ARN sendiri, berbeda dari ARN tabel.
Mengembangkan Aplikasi di AWS

Periode retensi

 

retensi

  • Catatan stream disimpan selama 24 jam.
    • Retensi bersifat tetap dan tidak dapat dikonfigurasi.
  • Mengubah jenis tampilan mengharuskan membuat ulang stream.
    • Stream baru menghasilkan ARN stream baru.
Mengembangkan Aplikasi di AWS

Streams dan unit kapasitas baca DynamoDB

 

rcu

  • Pembacaan stream TIDAK mengonsumsi read capacity units (RCU) Anda.
  • Mengaktifkan stream tidak memengaruhi throughput terprovisi.
Mengembangkan Aplikasi di AWS

Catatan stream

  • Tiap catatan stream memuat metadata yang menjelaskan perubahan.
  • Streams menangkap tiga jenis event:
    • INSERT
    • MODIFY
    • REMOVE

 

catatan stream

Mengembangkan Aplikasi di AWS
  • Jenis tampilan mengatur data yang masuk ke tiap catatan.
    • KEYS_ONLY: hanya partition dan sort key.
    • NEW_IMAGE: item penuh setelah perubahan.
    • OLD_IMAGE: item penuh sebelum perubahan.
    • NEW_AND_OLD_IMAGES: item sebelum dan sesudah.
  • NEW_AND_OLD_IMAGES paling tepat untuk audit.
  • Diperlukan untuk DynamoDB Global Tables.

tampilan stream

Mengembangkan Aplikasi di AWS
  • Streams menjaga urutan per partition key.
  • Lambda memroses catatan dalam batch.
    • Melakukan checkpoint kemajuan setelah tiap batch berhasil.
    • Batch yang gagal akan dicoba ulang.
    • Ulang coba berlanjut hingga sukses atau catatan kedaluwarsa.

 

pengurutan

Mengembangkan Aplikasi di AWS

 

streams dan aws lambda

  • Lambda adalah konsumen stream yang paling umum.
  • Menggunakan event source mapping berbasis polling.
  • Membaca catatan dari stream.
  • Memanggil fungsi Anda dengan batch catatan.
Mengembangkan Aplikasi di AWS

Pola arsitektur

 

pola arsitektur

  • Pola end-to-end yang umum:
    • Pembaruan item masuk ke DynamoDB.
    • Perubahan menghasilkan catatan stream.
    • Catatan memicu Lambda untuk pemrosesan.
Mengembangkan Aplikasi di AWS

Penskalaan

 

skala

  • Streams dibagi internal menjadi shard.
    • Mirip Kinesis Data Streams.
  • Tiap shard mendukung hingga dua konsumen simultan.
    • Melebihi batas ini sering menyebabkan throttling baca.
Mengembangkan Aplikasi di AWS
  • Konkruensi Lambda diskalakan sesuai jumlah shard.
  • Selaraskan pemrosesan dengan:
    • BatchSize: maksimum catatan per pemanggilan.
    • MaximumBatchingWindow: tunggu sebelum batch parsial.
    • MaximumRetryAttempts: ulang coba sebelum tujuan kegagalan.
    • MaximumRecordAgeInSeconds: buang catatan yang melewati usia ini.
    • ParallelizationFactor: pemrosesan paralel per shard (maks 10).

penskalaan dengan lambda

Mengembangkan Aplikasi di AWS

Penyaringan dan tumbling windows

  • Lambda mendukung kriteria filter.
    • Buang catatan sebelum fungsi dipanggil.
    • Mengurangi pemanggilan yang tidak perlu dan biaya.
  • Lambda mendukung tumbling windows.
    • Mengagregasi state lintas batch dalam satu shard.

 

filtering dan tumbling windows

Mengembangkan Aplikasi di AWS

Mengelola catatan duplikat

  • Streams menangkap tiap perubahan persis satu kali.
  • Lambda memroses catatan dengan semantik at-least-once.
    • Ulang coba bisa memroses ulang catatan yang sama.
  • Rancang konsumen agar idempoten.
  • Pola umum: simpan eventID atau SequenceNumber yang sudah diproses.
    • Lewati catatan yang sudah Anda tangani.
    • Keduanya tetap stabil saat ulang coba.
    • Kunci idempotensi yang andal.

 

mengelola catatan duplikat

Mengembangkan Aplikasi di AWS

Menangani kegagalan

 

menangani kegagalan

  • ReportBatchItemFailures hanya mengulang catatan yang gagal.
  • Tangani kegagalan Lambda dengan:
    • BisectBatchOnFunctionError untuk pembelahan batch.
    • Kontrol ulang coba.
    • Tujuan kegagalan untuk batch beracun yang menghabiskan ulang coba.
Mengembangkan Aplikasi di AWS

Integrasi DynamoDB ke Kinesis

 

integrasi

  • Tabel dapat mendorong perubahan langsung ke Kinesis Data Streams.
    • Melalui fitur Kinesis Data Streams for DynamoDB.
    • Kemampuan terpisah dan paralel, bukan berantai.
    • Event TIDAK mengalir melalui DynamoDB Streams.
  • Keduanya dapat berjalan bersamaan pada tabel yang sama.
    • Beroperasi secara independen.
    • Mendukung arsitektur streaming dan analitik yang lebih luas.
Mengembangkan Aplikasi di AWS

Pemantauan: isu umum

 

pemecahan masalah

  • Isu operasional umum yang perlu diawasi:
    • Partisi panas.
    • Ulang coba yang gagal.
    • Pemrosesan duplikat.
    • Throttling dan kelambatan konsumen.
Mengembangkan Aplikasi di AWS

Pemantauan: metrik CloudWatch

  • Metrik CloudWatch utama untuk dipantau:
    • Lambda Errors: menyoroti isu kode atau hilir.
    • IteratorAge: nilai tinggi menandai konsumen lambat.
    • Metrik throttling: batas baca terlampaui.
    • Kegagalan pemrosesan batch: catatan dikirim ke DLQ.

 

pemecahan masalah

Mengembangkan Aplikasi di AWS

Keamanan

  • Akses ke stream dikendalikan dengan izin IAM.
  • Streams mewarisi pengaturan enkripsi tabel.
    • Termasuk enkripsi sisi server saat disimpan dengan KMS.
  • Terapkan kebijakan least-privilege untuk konsumen dan pemroses hilir.

 

keamanan

Mengembangkan Aplikasi di AWS

Ayo berlatih!

Mengembangkan Aplikasi di AWS

Preparing Video For Download...