Data streaming

Mengembangkan Aplikasi di AWS

Ricardo Sueiras

Principal Technologist

Dasar-dasar data streaming

 

data streaming

  • Rekaman diproses terus-menerus saat tiba.
  • Produser menulis ke sebuah stream.
  • Konsumer membaca secara mandiri dan paralel.
  • Menyerap lonjakan trafik tanpa menunggu pekerjaan batch.
Mengembangkan Aplikasi di AWS

Apa saja penyusun data streaming?

 

komponen sistem streaming

  • Produser: aplikasi yang memancarkan rekaman.
  • Stream: buffer tahan lama dan berurut yang memisahkan produser dari konsumer.
  • Konsumer: aplikasi yang membaca dan memproses rekaman.
  • Penyimpanan dan Retensi: menetapkan lamanya rekaman tersedia untuk pemutaran ulang.
Mengembangkan Aplikasi di AWS

Shard

 

shard

 

  • Shard adalah unit throughput dan pemrosesan paralel.
  • Kunci partisi mendistribusikan rekaman ke shard.
  • Urutan hanya dijamin dalam satu shard.
  • Konsumer memakai check-pointing untuk melacak progres dan pulih dari kegagalan.
Mengembangkan Aplikasi di AWS

Layanan terkelola AWS untuk data streaming

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Blok bangunan inti untuk aplikasi data streaming.

 

layanan aws

Mengembangkan Aplikasi di AWS

Kinesis Data Streams

  • Streaming berlatensi rendah.
  • Retensi dapat dikonfigurasi: 24 jam (bawaan) hingga 365 hari.
  • Stream tahan lama dan dapat diputar ulang.
  • Banyak konsumer dapat membaca secara paralel.
  • Pengembang mengelola skala menggunakan shard.

 

kinesis data streams

Mengembangkan Aplikasi di AWS

Kapan menggunakan Kinesis Data Streams

  • Pilih ini saat Anda butuh latensi real-time.
  • Anda memerlukan pemutaran ulang rekaman.
  • Anda memiliki banyak konsumer independen.
  • Anda butuh logika transformasi khusus.

 

kinesis data streams

Mengembangkan Aplikasi di AWS

Menulis rekaman

 

pustaka klien

  • Kunci partisi mengendalikan penempatan shard dan urutan.
  • PutRecords membundel hingga 500 rekaman atau 5 MB per permintaan.
  • Kegagalan dilaporkan per rekaman.
  • FailedRecordCount membantu mengidentifikasi rekaman gagal.
Mengembangkan Aplikasi di AWS

Mengonsumsi rekaman: klasik

 

klasik

 

  • Konsumer melakukan polling sesuai kebutuhan ke Kinesis API.
  • Batas tulis: 1 MB/detik atau 1.000 rekaman/detik.
  • Batas baca: 2 MB/detik atau 5 panggilan GetRecords/detik.
Mengembangkan Aplikasi di AWS

Mengonsumsi rekaman: awal stream

 

awal stream

  • Konsumer menentukan dari mana mulai membaca di stream.
  • TRIM_HORIZON: rekaman tertua yang tersedia di shard.
  • LATEST: rekaman baru berikutnya.
  • AT_SEQUENCE_NUMBER atau AFTER_SEQUENCE_NUMBER: dari nomor urut tertentu.
  • AT_TIMESTAMP: pada atau setelah cap waktu tertentu.
Mengembangkan Aplikasi di AWS

Mengonsumsi rekaman: enhanced fan-out

  • Tiap konsumer terdaftar mendapat 2 MB/detik khusus per shard.
  • Rekaman dikirim via push HTTP/2.
  • Gunakan saat banyak konsumer independen butuh latensi rendah.
  • Dan butuh throughput tinggi ke stream yang sama.

 

pola - enhanced fan-out

Mengembangkan Aplikasi di AWS

Pemetaan sumber event Lambda

  • Lambda mem-poll Kinesis dan memicu secara batch.
  • BatchSize dan MaximumBatchingWindow mengatur bentuk batch.
  • ParallelizationFactor: pemanggilan bersamaan per shard.
  • BisectBatchOnFunctionError: membelah batch gagal untuk mengisolasi poison pill.
  • ReportBatchItemFailures: menghindari mengulang rekaman yang sudah berhasil.
  • OnFailure: mengirim batch tak terproses ke SQS atau SNS DLQ.

 

pemetaaan sumber event lambda

Mengembangkan Aplikasi di AWS

Data Firehose

  • Layanan terkelola yang mengirim data streaming ke tujuan.
  • Target termasuk Amazon S3, Redshift, dan endpoint HTTP.
  • Mendukung buffering, konversi format, dan transformasi Lambda.
  • Latensi lebih tinggi, dibuffer beberapa detik hingga menit.
  • Tanpa pemutaran ulang atau retensi jangka panjang.
  • Cocok untuk sekadar mengirim data ke tujuan.

 

data firehose

Mengembangkan Aplikasi di AWS

Pola: hot-cold

 

pola - hot/cold

 

  • Pola hot-cold menggabungkan Data Streams dan Data Firehose.
  • Data Streams memampukan pemrosesan real-time untuk produser.
  • Firehose mengarsipkan rekaman dari sumber yang sama ke S3.
Mengembangkan Aplikasi di AWS

Kinesis vs SQS

 

sqs vs kinesis

 

  • Gunakan Kinesis untuk stream berurut, dapat diputar ulang, dengan banyak konsumer.
  • Kinesis cocok untuk data runtun waktu dan berurut.
  • Gunakan SQS untuk distribusi tugas.
Mengembangkan Aplikasi di AWS

Menskalakan data streaming

 

skala

  • Data stream dibagi menjadi shard.
  • Kunci partisi merutekan rekaman ke shard tertentu.
  • Kunci yang sama selalu ke shard yang sama, menjaga urutan.
  • Kunci partisi tidak merata menyebabkan shard panas.
  • Kurangi dengan kunci ber kardinalitas tinggi.
  • Lakukan reshard untuk skala naik atau turun.
Mengembangkan Aplikasi di AWS

Mode kapasitas: provisioned

  • Tersedia dua mode kapasitas.
  • Mode provisioned memakai jumlah shard tetap, dikelola manual.
  • Memberikan biaya dan kapasitas yang terprediksi.
  • Perlu pemantauan agar terhindar dari throttling dan kelebihan penyediaan.

 

mode kapasitas

Mengembangkan Aplikasi di AWS

Mode kapasitas: on-demand

  • Mode on-demand menskalakan otomatis sesuai trafik.
  • Tanpa pengelolaan shard manual.
  • Menyederhanakan operasi untuk beban kerja tak terprediksi.
  • Biaya lebih tinggi saat trafik berat berkelanjutan.

 

mode kapasitas

Mengembangkan Aplikasi di AWS

Kinesis Producer Library (KPL)

  • Pustaka AWS memudahkan membangun produser dan konsumer berskala.
  • Kinesis Producer Library (KPL) membundel dan mengagregasi rekaman.
  • Juga mengompresi rekaman dan mengulang saat gagal.
  • Buffer secara asinkron untuk memaksimalkan throughput produser.

 

pustaka klien

Mengembangkan Aplikasi di AWS

Kinesis Consumer Library (KCL)

 

pustaka klien

 

  • Kinesis Consumer Library (KCL) menangani koordinasi shard.
  • Mengelola penyewaan worker dan check-pointing.
  • Status disimpan di tabel DynamoDB.
  • Konsumer memakai status itu untuk menentukan titik lanjut.
Mengembangkan Aplikasi di AWS

Penanganan kegagalan: idempoten

 

penanganan kegagalan

 

  • Pengiriman Kinesis adalah at-least-once, jadi duplikasi mungkin terjadi.
  • Rancang konsumer agar idempoten.
  • Deduplikasi memakai nomor urut atau kunci bisnis di DynamoDB.
  • Konsumer dapat membaca ulang rekaman yang ditahan dari nomor urut atau cap waktu.
Mengembangkan Aplikasi di AWS

Penanganan kegagalan: error throughput

 

penanganan kegagalan

 

  • ProvisionedThroughputExceededException menandakan throttling.
  • Atasi dengan menambah jumlah shard.
  • Perbaiki distribusi kunci partisi.
  • Coba ulang dengan backoff.
  • Ganti mode kapasitas.
Mengembangkan Aplikasi di AWS
  • Lacak IncomingBytes dan IncomingRecords di CloudWatch.
  • Perhatikan WriteProvisionedThroughputExceeded untuk throttling.
  • Ketertinggalan konsumer terjadi saat konsumsi lebih lambat dari produksi.
  • Lacak GetRecords.IteratorAgeMilliseconds: usia tinggi menandakan lag.

 

pencatatan dan pemantauan

Mengembangkan Aplikasi di AWS

Keamanan

  • Enkripsi sisi server saat diam menggunakan AWS KMS.
  • Enkripsi saat transit menggunakan TLS.
  • Kebijakan IAM mengendalikan akses.

 

keamanan

Mengembangkan Aplikasi di AWS

Ayo berlatih!

Mengembangkan Aplikasi di AWS

Preparing Video For Download...