Streamování dat

Developing Applications on AWS

Ricardo Sueiras

Principal Technologist

Základy streamování dat

 

streaming-data

  • Záznamy se zpracovávají průběžně, jak přicházejí.
  • Producenti zapisují do streamu.
  • Konzumenti čtou nezávisle a paralelně.
  • Zvládá výkyvy provozu bez čekání na dávkové úlohy.
Developing Applications on AWS

Z čeho se skládají streamová data?

 

komponenty streamovacího systému

  • Producenti: aplikace, které generují záznamy.
  • Streamy: trvalé, uspořádané vyrovnávací paměti oddělující producenty od konzumentů.
  • Konzumenti: aplikace, které záznamy čtou a zpracovávají.
  • Úložiště a retence: určuje, jak dlouho jsou záznamy dostupné pro přehrání.
Developing Applications on AWS

Shardy

 

shards

 

  • Shardy jsou jednotkami propustnosti a paralelního zpracování.
  • Partition keys rozdělují záznamy mezi shardy.
  • Pořadí je zaručeno pouze v rámci jednoho shardu.
  • Konzumenti využívají check-pointing ke sledování průběhu a obnově po selhání.
Developing Applications on AWS

Spravované AWS služby pro streamování dat

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Základní stavební bloky pro streamovací aplikace.

 

aws services

Developing Applications on AWS

Kinesis Data Streams

  • Streamování s nízkou latencí.
  • Konfigurovatelná retence: 24 hodin (výchozí) až 365 dní.
  • Trvalé, přehratelné streamy.
  • Více konzumentů může číst paralelně.
  • Vývojáři spravují škálování pomocí shardů.

 

kinesis data streams

Developing Applications on AWS

Kdy použít Kinesis Data Streams

  • Použij, když potřebuješ nízkou latenci v reálném čase.
  • Vyžaduješ přehrání záznamů.
  • Máš více nezávislých konzumentů.
  • Potřebuješ vlastní logiku transformace.

 

kinesis data streams

Developing Applications on AWS

Zápis záznamů

 

client libraries

  • Partition keys řídí umístění do shardu a pořadí záznamů.
  • PutRecords sdružuje až 500 záznamů nebo 5 MB na požadavek.
  • Selhání jsou hlášena pro každý záznam zvlášť.
  • FailedRecordCount pomáhá identifikovat neúspěšné záznamy.
Developing Applications on AWS

Čtení záznamů: klasický způsob

 

classic

 

  • Konzumenti dotazují Kinesis API na vyžádání.
  • Limity zápisu: 1 MB/s nebo 1 000 záznamů/s.
  • Limity čtení: 2 MB/s nebo 5 volání GetRecords/s.
Developing Applications on AWS

Čtení záznamů: začátek streamu

 

stream-start

  • Konzumenti určují, od které pozice ve streamu začít číst.
  • TRIM_HORIZON: nejstarší dostupný záznam v shardu.
  • LATEST: příští nový záznam.
  • AT_SEQUENCE_NUMBER nebo AFTER_SEQUENCE_NUMBER: od konkrétního sekvenčního čísla.
  • AT_TIMESTAMP: od zadaného časového razítka nebo po něm.
Developing Applications on AWS

Čtení záznamů: enhanced fan-out

  • Každý registrovaný konzument získá vyhrazené 2 MB/s na shard.
  • Záznamy jsou doručovány přes HTTP/2 push.
  • Použij, když více nezávislých konzumentů potřebuje nízkou latenci.
  • A zároveň vysokou propustnost ke stejnému streamu.

 

pattern - enhanced fan-out

Developing Applications on AWS

Mapování zdrojů událostí pro Lambda

  • Lambda dotazuje Kinesis a spouští funkce v dávkách.
  • BatchSize a MaximumBatchingWindow řídí podobu dávky.
  • ParallelizationFactor: souběžné vyvolání na shard.
  • BisectBatchOnFunctionError: rozdělí chybnou dávku a izoluje problematické záznamy.
  • ReportBatchItemFailures: zabrání opakovanému zpracování již úspěšných záznamů.
  • OnFailure: odesílá nezpracovatelné dávky do SQS nebo SNS DLQ.

 

lambda event sourcing

Developing Applications on AWS

Data Firehose

  • Spravovaná služba pro doručování streamových dat do cílových úložišť.
  • Podporuje Amazon S3, Redshift a HTTP endpointy.
  • Nabízí bufferování, konverzi formátů a transformace přes Lambda.
  • Vyšší latence, data se bufferují v řádu sekund až minut.
  • Nepodporuje přehrávání ani dlouhodobou retenci.
  • Ideální pro jednoduché přesunutí dat do cíle.

 

data firehose

Developing Applications on AWS

Vzor: hot-cold

 

pattern - hold/cold

 

  • Vzor hot-cold kombinuje Data Streams a Data Firehose.
  • Data Streams umožňuje zpracování v reálném čase pro producenty.
  • Firehose archivuje záznamy ze stejného zdroje do S3.
Developing Applications on AWS

Kinesis vs SQS

 

sqs vs kinesis

 

  • Kinesis použij pro uspořádané, přehratelné streamy s více konzumenty.
  • Kinesis se hodí pro časové řady a uspořádaná data.
  • SQS použij pro distribuci úloh.
Developing Applications on AWS

Škálování streamových dat

 

scaling

  • Datové streamy jsou rozděleny do shardů.
  • Partition keys směrují záznamy do konkrétního shardu.
  • Stejný klíč vždy skončí ve stejném shardu, čímž se zachovává pořadí.
  • Nevyvážené partition keys vedou ke vzniku hot shardů.
  • Řešením jsou klíče s vysokou kardinalitou.
  • Přeškálování (resharding) slouží ke zvětšení nebo zmenšení kapacity.
Developing Applications on AWS

Režimy kapacity: provisioned

  • K dispozici jsou dva režimy kapacity.
  • Provisioned režim používá pevný počet shardů spravovaných ručně.
  • Nabízí předvídatelné náklady a kapacitu.
  • Vyžaduje monitorování, aby nedocházelo k throttlingu a nadměrnému přidělování.

 

capacity modes

Developing Applications on AWS

Režimy kapacity: on-demand

  • On-demand režim škáluje automaticky podle provozu.
  • Bez ruční správy shardů.
  • Zjednodušuje provoz při nepředvídatelné zátěži.
  • Vyšší náklady při trvale vysokém provozu.

 

capacity modes

Developing Applications on AWS

Kinesis Producer Library (KPL)

  • AWS knihovny zjednodušují tvorbu škálovatelných producentů a konzumentů.
  • Kinesis Producer Library (KPL) sdružuje a agreguje záznamy.
  • Také záznamy komprimuje a opakuje odesílání při selhání.
  • Asynchronně bufferuje data pro maximální propustnost producenta.

 

client libraries

Developing Applications on AWS

Kinesis Consumer Library (KCL)

 

client libraries

 

  • Kinesis Consumer Library (KCL) zajišťuje koordinaci shardů.
  • Spravuje pronajímání workerů a check-pointing.
  • Stav je uložen v tabulce DynamoDB.
  • Konzumenti tento stav využívají ke zjištění, kde pokračovat.
Developing Applications on AWS

Řešení selhání: idempotence

 

handling failures

 

  • Kinesis doručuje záznamy alespoň jednou, duplikáty jsou tedy možné.
  • Navrhuj konzumenty jako idempotentní.
  • Deduplikuj pomocí sekvenčního čísla nebo business klíče v DynamoDB.
  • Konzumenti mohou znovu přečíst uchované záznamy od daného sekvenčního čísla nebo časového razítka.
Developing Applications on AWS

Řešení selhání: chyby propustnosti

 

handling failures

 

  • ProvisionedThroughputExceededException signalizuje throttling.
  • Řeš zvýšením počtu shardů.
  • Zlepši distribuci partition keys.
  • Opakuj pokus s backoffem.
  • Přepni režim kapacity.
Developing Applications on AWS
  • Sleduj IncomingBytes a IncomingRecords v CloudWatch.
  • Hlídej WriteProvisionedThroughputExceeded kvůli throttlingu.
  • Zpoždění konzumenta nastává, když čte pomaleji, než producent zapisuje.
  • Sleduj GetRecords.IteratorAgeMilliseconds: vysoká hodnota značí zpoždění.

 

monitoring

Developing Applications on AWS

Zabezpečení

  • Šifrování v klidu na straně serveru pomocí AWS KMS.
  • Šifrování při přenosu pomocí TLS.
  • Přístup řídí IAM politiky.

 

security

Developing Applications on AWS

Pojďme cvičit!

Developing Applications on AWS

Preparing Video For Download...