Architecture Lambda

L'architecture Lambda est une architecture de traitement de données conçue pour traiter des quantités énormes de données en tirant parti des méthodes de traitement par lots et de traitement de flux. Cette approche de l'architecture tente d'équilibrer la latence, le débit et la tolérance aux pannes en utilisant le traitement par lots pour fournir des vues complètes et précises des données par lots, tout en utilisant simultanément le traitement de flux en temps réel pour fournir des vues des données en ligne. Les deux sorties de vue peuvent être jointes avant la présentation. La montée en puissance de l'architecture lambda est corrélée à la croissance du big data, à l'analyse en temps réel et à la volonté d'atténuer les latences de MapReduce[1].

Flux de données à travers les couches de traitement et de traitement d'une architecture lambda générique

L'architecture Lambda repose sur un modèle de données avec une source de données immuable, en ajout uniquement, qui sert de système d'enregistrement[2]. Il est destiné à l'acquisition et au traitement d'événements horodatés qui sont ajoutés aux événements existants au lieu de les écraser. L'état est déterminé à partir de l'ordre naturel des données basé sur le temps.

Vue d'ensemble

modifier

L'architecture Lambda est un système composé de trois couches: le traitement par lots, le traitement rapide (ou en temps réel) et une couche serveur pour répondre aux requêtes[3]. Les couches de traitement acquièrent à partir d'une copie maîtresse immuable l'intégralité du jeu de données.

Couche batch

modifier

La couche de traitement par lots précalcule les résultats à l'aide d'un système de traitement distribué capable de traiter de très grandes quantités de données. La couche de traitement par lots vise une précision parfaite en permettant de traiter toutes les données disponibles lors de la génération de vues. Cela signifie qu’il peut corriger les erreurs en recalculant l’ensemble des données, puis en mettant à jour les vues existantes. La sortie est généralement stockée dans une base de données en lecture seule, les mises à jour remplaçant complètement les vues précalculées existantes[3].

Apache Hadoop est le système de traitement par lots standard de facto utilisé dans la plupart des architectures à haut débit[4].

Couche temps réel

modifier
 
Schéma montrant le flux de données à travers les couches de traitement et de desserte de l'architecture lambda. Des exemples de composants nommés sont montrés.

La couche temps réel traite les flux de données en temps réel et sans les exigences de correction ni de complétude. Cette couche sacrifie le débit car elle vise à minimiser le temps de latence en fournissant des vues en temps réel des données les plus récentes. Essentiellement, la couche temps réel est chargée de combler le "vide" causé par le retard de la couche de traitement par lot dans la fourniture de vues basées sur les données les plus récentes. Les vues de cette couche peuvent ne pas être aussi précises ni complètes que celles éventuellement produites par la couche de traitement par lot, mais elles sont disponibles presque immédiatement après la réception des données et peuvent être remplacées lorsque les vues de la couche batch deviennent disponibles[3].

Les technologies de traitement de flux généralement utilisées dans cette couche incluent Apache Storm, SQLstream, Apache Spark ou Apache Flink. La sortie est généralement stockée sur des bases de données NoSQL rapides[5],[6].

Couche service

modifier
 
Diagramme illustrant une architecture lambda avec un magasin de données Druid.

La sortie des couches batch et couches temps réel est stockée dans la couche services, qui répond aux requêtes ad hoc en renvoyant des vues précalculées ou en construisant des vues à partir des données traitées.

Comme exemple de technologie utilisée dans la couche services on peut citer Apache Druid, qui fournit un seul cluster pour gérer la sortie des deux couches[7]. Parmi les autres technologies pour la couche de service on pourra citer Apache Cassandra, Apache HBase, MongoDB, VoltDB ou Elasticsearch pour la sortie de la couche temps réel, et Elephant DB, Apache Impala, SAP HANA ou Apache Hive pour la sortie de couche Batch[2],[5].

Optimisations

modifier

Pour optimiser l'ensemble de données et améliorer l'efficacité des requêtes, différentes techniques de cumul et d'agrégation sont exécutées sur des données brutes [7] tandis que des techniques d'estimation sont utilisées pour réduire davantage les coûts de calcul[8]. Et bien qu'un recalcul complet et coûteux soit nécessaire pour la tolérance aux pannes, des algorithmes de calcul incrémentaux peuvent être ajoutés de manière sélective pour augmenter l'efficacité, et des techniques telles que le calcul partiel et l'optimisation de l'utilisation des ressources peuvent efficacement aider à réduire le temps de latence[3].

Critique

modifier

La critique de l'architecture lambda s'est concentrée sur sa complexité inhérente et son influence limitante. Les côtés batch et streaming nécessitent chacun une base de code différente qui doit être gérée et synchronisée afin que les données traitées produisent le même résultat dans les deux chemins. Cependant, tenter de s'abstraire des bases de code dans un framework unique met hors de portée de nombreux outils spécialisés dans les écosystèmes batch et temps réel[9].

Lors d’une discussion technique sur les avantages de l’utilisation d’une approche de streaming pur, il a été noté que l’utilisation d’un framework de streaming flexible tel que Apache Samza pourrait offrir les mêmes avantages que le traitement par lots sans latence[10]. Une telle structure de diffusion en continu pourrait permettre de collecter et de traiter des fenêtres de données de taille arbitraire, d’adapter le blocage et de gérer l’état.

Voir également

modifier
  • Traitement du flux d'événements

Références

modifier
  1. (en) Werner Schuster, « Nathan Marz on Storm, Immutability in the Lambda Architecture, Clojure », www.infoq.com
  2. a et b (en) Bijnens, Nathan. "Une architecture temps réel utilisant Hadoop et Storm". 11 décembre 2013.
  3. a b c et d (en) Marz, Nathan; Warren, James. Big Data: principes et meilleures pratiques des systèmes de données en temps réel évolutifs, Manning Publications, 2013.
  4. (en) Kar, Saroj. "Le secteur Hadoop connaîtra une croissance annuelle de 58% pour la période 2013-2020", 28 mai 2014. Cloud Times.
  5. a et b (en) Kinley, James. "L'architecture Lambda: principes pour l'architecture de systèmes Big Data en temps réel", récupéré le 26 août 2014.
  6. (en) Ferrera Bertran, Pere. "Architecture Lambda: Un état de l'art". 17 janvier 2014, Datasalt.
  7. a et b (en) Yang, Fangjin et Merlino, Gian. "Analyse en temps réel avec les technologies Open Source". 30 juillet 2014.
  8. (en) Ray, Nelson. "L'art de se rapprocher des distributions: Histogrammes et quantiles à l'échelle". 12 septembre 2013. Metamarkets.
  9. (en) Jay Kreps, « Questioning the Lambda Architecture », radar.oreilly.com, Oreilly (consulté le )
  10. (en) Hacker News récupéré le 20 août 2014

Liens externes

modifier