Données en continu

Développer des applications sur AWS

Ricardo Sueiras

Principal Technologist

Notions de base sur les données en continu

 

données en continu

  • Enregistrements traités en continu à l'arrivée.
  • Les producteurs écrivent dans un flux.
  • Les consommateurs lisent de façon indépendante et en parallèle.
  • Absorbe les pointes de trafic sans attendre les traitements par lots.
Développer des applications sur AWS

De quoi se composent les données en continu ?

 

composants d'un système de diffusion en continu

  • Producteurs : applications qui émettent des enregistrements.
  • Flux : tampons durables et ordonnés qui découplent producteurs et consommateurs.
  • Consommateurs : applications qui lisent et traitent les enregistrements.
  • Stockage et rétention : durée pendant laquelle les enregistrements restent rejouables.
Développer des applications sur AWS

Fragments (« shards »)

 

fragments

 

  • Les fragments (« shards ») sont des unités de débit et de parallélisme.
  • Les clés de partition répartissent les enregistrements entre les fragments.
  • L'ordre n'est garanti qu'à l'intérieur d'un fragment.
  • Les consommateurs utilisent le pointage (« check-pointing ») pour suivre l'avancement et récupérer après échec.
Développer des applications sur AWS

Services gérés AWS pour les données en continu

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Blocs de base des applications de données en continu.

 

services aws

Développer des applications sur AWS

Kinesis Data Streams

  • Diffusion à faible latence.
  • Rétention configurable : 24 h (par défaut) jusqu'à 365 jours.
  • Flux durables et rejouables.
  • Plusieurs consommateurs peuvent lire en parallèle.
  • Les développeurs gèrent l'échelle via les fragments.

 

kinesis data streams

Développer des applications sur AWS

Quand utiliser Kinesis Data Streams

  • À choisir quand vous avez besoin de latence en temps réel.
  • Vous devez pouvoir rejouer des enregistrements.
  • Vous avez plusieurs consommateurs indépendants.
  • Vous avez besoin d'une logique de transformation personnalisée.

 

kinesis data streams

Développer des applications sur AWS

Écriture des enregistrements

 

bibliothèques clientes

  • Les clés de partition contrôlent l'assignation et l'ordre des fragments.
  • PutRecords regroupe jusqu'à 500 enregistrements ou 5 Mo par requête.
  • Les échecs sont signalés par enregistrement.
  • FailedRecordCount aide à repérer les enregistrements en échec.
Développer des applications sur AWS

Consommation : mode classique

 

classique

 

  • Les consommateurs interrogent l'API Kinesis sur demande.
  • Limites d'écriture : 1 Mo/s ou 1 000 enregistrements/s.
  • Limites de lecture : 2 Mo/s ou 5 appels GetRecords/s.
Développer des applications sur AWS

Consommation : point de départ du flux

 

début du flux

  • Les consommateurs indiquent où commencer à lire dans le flux.
  • TRIM_HORIZON : plus ancien enregistrement du fragment.
  • LATEST : le prochain nouvel enregistrement.
  • AT_SEQUENCE_NUMBER ou AFTER_SEQUENCE_NUMBER : à partir d'un numéro de séquence.
  • AT_TIMESTAMP : à l'horodatage indiqué ou après.
Développer des applications sur AWS

Consommation : diffusion élargie (enhanced fan-out)

  • Chaque consommateur enregistré obtient 2 Mo/s par fragment.
  • Livraison des enregistrements via envoi HTTP/2.
  • À utiliser quand plusieurs consommateurs indépendants exigent une faible latence.
  • Et un débit élevé vers le même flux.

 

modèle - diffusion élargie

Développer des applications sur AWS

Mappage de source d'événements Lambda

  • Lambda interroge Kinesis et appelle en lots.
  • BatchSize et MaximumBatchingWindow définissent la forme des lots.
  • ParallelizationFactor : appels concurrents par fragment.
  • BisectBatchOnFunctionError : scinde un lot en échec pour isoler les éléments problématiques.
  • ReportBatchItemFailures : évite de relire les éléments déjà réussis.
  • OnFailure : envoie les lots non traitables vers une file DLQ SQS ou SNS.

 

mappage de source d'événements lambda

Développer des applications sur AWS

Data Firehose

  • Service géré qui livre les données en continu vers des destinations.
  • Cibles : Amazon S3, Redshift et points de terminaison HTTP.
  • Prend en charge la mise en mémoire tampon, la conversion de format et les transformations Lambda.
  • Latence plus élevée, de quelques secondes à minutes.
  • Pas de relecture ni de rétention à long terme.
  • Idéal pour acheminer simplement les données vers une destination.

 

data firehose

Développer des applications sur AWS

Modèle : chaud-froid

 

modèle - chaud/froid

 

  • Le modèle chaud-froid combine Data Streams et Data Firehose.
  • Data Streams permet le traitement en temps réel pour les producteurs.
  • Firehose archive les enregistrements de la même source dans S3.
Développer des applications sur AWS

Kinesis vs SQS

 

sqs vs kinesis

 

  • Utilisez Kinesis pour des flux ordonnés, rejouables, avec plusieurs consommateurs.
  • Kinesis convient aux séries chronologiques et aux données ordonnées.
  • Utilisez SQS pour la répartition de tâches.
Développer des applications sur AWS

Mise à l'échelle des données en continu

 

mise à l'échelle

  • Les flux de données sont divisés en fragments.
  • Les clés de partition acheminent vers un fragment précis.
  • La même clé va toujours au même fragment, préservant l'ordre.
  • Une répartition inégale crée des fragments « chauds ».
  • Atténuer avec des clés à forte cardinalité.
  • Redimensionnez (reshard) pour augmenter ou réduire.
Développer des applications sur AWS

Modes de capacité : provisionné

  • Deux modes de capacité sont offerts.
  • Le mode provisionné utilise un nombre fixe de fragments, géré manuellement.
  • Coût et capacité prévisibles.
  • Exige une surveillance pour éviter l'étranglement et la surprovision.

 

modes de capacité

Développer des applications sur AWS

Modes de capacité : à la demande

  • Le mode à la demande s'adapte automatiquement au trafic.
  • Aucune gestion manuelle des fragments.
  • Simplifie l'exploitation pour des charges imprévisibles.
  • Coût plus élevé sous trafic soutenu.

 

modes de capacité

Développer des applications sur AWS

Kinesis Producer Library (KPL)

  • Les bibliothèques AWS facilitent la création de producteurs et consommateurs évolutifs.
  • La Kinesis Producer Library (KPL) regroupe et agrège les enregistrements.
  • Elle compresse aussi et réessaie en cas d'échec.
  • Mise en mémoire tampon asynchrone pour maximiser le débit du producteur.

 

bibliothèques clientes

Développer des applications sur AWS

Kinesis Consumer Library (KCL)

 

bibliothèques clientes

 

  • La Kinesis Consumer Library (KCL) gère la coordination des fragments.
  • Elle gère la location des travailleurs et le pointage.
  • L'état est stocké dans une table DynamoDB.
  • Les consommateurs l'utilisent pour savoir où reprendre.
Développer des applications sur AWS

Gestion des échecs : idempotence

 

gestion des échecs

 

  • Livraison Kinesis au moins une fois : des doublons sont possibles.
  • Concevez des consommateurs idempotents.
  • Dédupliquez à l'aide du numéro de séquence ou d'une clé métier dans DynamoDB.
  • Les consommateurs peuvent relire les enregistrements retenus depuis un numéro de séquence ou un horodatage.
Développer des applications sur AWS

Gestion des échecs : erreurs de débit

 

gestion des échecs

 

  • ProvisionedThroughputExceededException signale l'étranglement.
  • Résolvez en augmentant le nombre de fragments.
  • Améliorez la distribution des clés de partition.
  • Réessayez avec temporisation exponentielle.
  • Changez de mode de capacité.
Développer des applications sur AWS
  • Suivez IncomingBytes et IncomingRecords dans CloudWatch.
  • Surveillez WriteProvisionedThroughputExceeded pour l'étranglement.
  • Le retard consommateur survient quand la lecture est plus lente que l'écriture.
  • Suivez GetRecords.IteratorAgeMilliseconds : un âge élevé indique un retard.

 

journalisation et surveillance

Développer des applications sur AWS

Sécurité

  • Chiffrement côté serveur au repos avec AWS KMS.
  • Chiffrement en transit avec TLS.
  • Les stratégies IAM contrôlent l'accès.

 

sécurité

Développer des applications sur AWS

Passons à la pratique !

Développer des applications sur AWS

Preparing Video For Download...