Druid est un magasin de données distribué, open-source et orienté colonnes, écrit en Java. Il est conçu pour ingérer rapidement de grandes quantités de données d'événements et fournir des requêtes à faible latence sur ces données. Le nom Druid provient de la classe de druide métamorphe dans de nombreux jeux de rôle, reflétant la capacité de l'architecture du système à se transformer pour résoudre différents types de problèmes de données. Druid est couramment utilisé dans les applications de business intelligence et d'OLAP pour analyser de grands volumes de données en temps réel et historiques, et il est devenu un outil fondamental dans les pipelines modernes d'intelligence artificielle et d'observabilité.
Druid est utilisé en production par des entreprises technologiques telles que Alibaba, Airbnb, Nielsen, Cisco, eBay, Lyft, Netflix, PayPal, Pinterest, Reddit, Twitter, Walmart, la Fondation Wikimedia et Yahoo. Sa capacité à gérer des requêtes en moins d'une seconde sur des données en streaming en fait un choix populaire pour alimenter des tableaux de bord, la détection d'anomalies et les systèmes de prise de décision en temps réel, y compris ceux qui soutiennent la surveillance de modèles de apprentissage automatique et les applications de IA générative.
Historique
Druid a été lancé en 2011 par Eric Tschetter, Fangjin Yang, Gian Merlino et Vadim Ogievetsky pour alimenter le produit d'analyse de Metamarkets, une entreprise spécialisée dans l'analyse de données en temps réel pour l'industrie publicitaire. Le projet a été open-sourcé sous licence GPL en octobre 2012, permettant à des développeurs externes de contribuer et d'adopter la technologie. En février 2015, le projet est passé à la licence Apache, une licence plus permissive qui a facilité une adoption commerciale plus large et l'intégration avec d'autres écosystèmes open-source.
Depuis son open-sourcing, Druid a évolué grâce aux contributions d'une communauté diversifiée, avec des versions majeures ajoutant des fonctionnalités telles que des capacités d'ingestion améliorées, des performances de requête accrues et une meilleure intégration avec les systèmes de stockage cloud. La gouvernance du projet a été transférée à la Fondation Apache Software, où il reste un projet de premier plan actif.
Architecture
Lorsqu'il est entièrement déployé, Druid fonctionne comme un cluster de processus spécialisés, appelés nœuds, pour prendre en charge une architecture tolérante aux pannes où les données sont stockées de manière redondante et sans point de défaillance unique. Le cluster inclut des dépendances externes pour la coordination, le stockage des métadonnées et le stockage profond. Apache ZooKeeper gère la coordination et les élections de leader, tandis que le stockage des métadonnées (par exemple, MySQL, PostgreSQL ou Derby) suit les informations sur les segments, et une installation de stockage profond (par exemple, HDFS ou Amazon S3) fournit une sauvegarde permanente des données.
La conception de base sépare les données en segments immuables, qui sont partitionnés et répliqués sur des nœuds historiques. Les nœuds en temps réel gèrent les données en streaming entrantes, les convertissant en segments qui sont ensuite transférés aux nœuds historiques pour un stockage à long terme. Cette séparation permet à Druid de s'adapter horizontalement, en ajoutant des nœuds pour gérer un volume de données ou une charge de requêtes accru sans perturber les opérations existantes.
Gestion des requêtes
Les requêtes des clients atteignent d'abord les nœuds brokers, qui les transmettent aux nœuds de données appropriés, qu'ils soient historiques ou en temps réel. Étant donné que les segments de Druid peuvent être partitionnés, une requête entrante peut nécessiter des données provenant de plusieurs segments et partitions, ou shards, stockés sur différents nœuds du cluster. Les brokers sont capables d'apprendre quels nœuds possèdent les données requises, de fusionner les résultats partiels et de renvoyer le résultat agrégé au client. Ce moteur de requête distribué permet des temps de réponse inférieurs à la seconde même sur des ensembles de données allant jusqu'à des téraoctets ou des pétaoctets.
Gestion du cluster
Les opérations liées à la gestion des données dans les nœuds historiques sont supervisées par les nœuds coordinateurs. Ces nœuds gèrent le chargement des segments, la réplication et la compaction, garantissant que les données sont réparties uniformément et disponibles. Apache ZooKeeper est utilisé pour enregistrer tous les nœuds, gérer certains aspects des communications entre nœuds et assurer les élections de leader, ce qui aide à maintenir la cohérence et la disponibilité dans le cluster.
Fonctionnalités
Druid offre plusieurs fonctionnalités clés qui le distinguent des bases de données traditionnelles. Il prend en charge l'ingestion de données en streaming à faible latence, permettant aux utilisateurs d'interroger les données en quelques secondes après leur arrivée. Il permet une exploration de données arbitraire en tranches et en dés, ce qui signifie que les utilisateurs peuvent filtrer, agréger et regrouper des données sur plusieurs dimensions sans requêtes prédéfinies. Les requêtes analytiques en moins d'une seconde sont une caractéristique de Druid, obtenue grâce à la pré-agrégation, au stockage en colonnes et à une indexation efficace. Druid fournit également des calculs approximatifs et exacts, offrant aux utilisateurs une flexibilité pour équilibrer la vitesse des requêtes et la précision.
Ces fonctionnalités rendent Druid bien adapté à des cas d'utilisation comme l'observabilité, où les métriques et les journaux des systèmes distribués doivent être analysés en temps réel. Dans le contexte de l'intelligence artificielle, Druid est souvent utilisé pour stocker et interroger les données de télémétrie des exécutions d'entraînement de réseaux de neurones ou pour surveiller les performances des services de grands modèles de langage déployés, permettant une détection rapide des anomalies ou de la dégradation.
Performance
En 2019, des chercheurs ont comparé les performances de Hive, Presto et Druid en utilisant un benchmark Star Schema Benchmark dénormalisé basé sur la norme TPC-H. Druid a été testé avec une configuration "Druid Best" utilisant des tables avec des partitions hachées et une configuration "Druid Suboptimal" qui n'utilise pas de partitions hachées. Les tests ont été menés en exécutant les 13 requêtes TPC-H avec le facteur d'échelle TPC-H 30 (une base de données de 30 Go), le facteur d'échelle 100 (une base de données de 100 Go) et le facteur d'échelle 300 (une base de données de 300 Go).
Les performances de Druid ont été mesurées comme étant au moins 98 % plus rapides que Hive et au moins 90 % plus rapides que Presto dans chaque scénario, même en utilisant la configuration Druid Suboptimisée. Cet avantage de vitesse spectaculaire provient du format de stockage en colonnes de Druid, qui réduit les E/S en ne lisant que les colonnes nécessaires à une requête, et de son utilisation d'agrégations pré-calculées qui évitent de scanner les données brutes. Les résultats mettent en évidence la pertinence de Druid pour l'analyse interactive où la faible latence est critique, comme dans les déploiements Amazon Web Services ou Google Cloud.
Cas d'utilisation dans l'IA et l'observabilité
Les capacités d'analyse en temps réel de Druid en ont fait un composant clé des plateformes d'observabilité, où il ingère des métriques, des traces et des journaux provenant d'applications et d'infrastructures. Les entreprises utilisent Druid pour alimenter des tableaux de bord qui suivent la santé du système, détectent les anomalies et soutiennent la réponse aux incidents. Dans les applications d'IA, Druid est utilisé pour stocker et interroger les données de caractéristiques pour les modèles de apprentissage automatique, permettant l'inférence en temps réel et la surveillance des modèles. Par exemple, une équipe déployant un modèle basé sur un transformeur pourrait utiliser Druid pour journaliser les latences de prédiction et les distributions d'entrée, puis interroger ces journaux pour identifier une dérive ou des problèmes de performance.
L'intégration de Druid avec les flux de travail de apprentissage profond est également en croissance, car les organisations cherchent à analyser les vastes quantités de télémétrie générées par les clusters d'entraînement. En fournissant des requêtes en moins d'une seconde sur des données en streaming, Druid soutient l'expérimentation itérative courante dans le apprentissage par renforcement et d'autres paradigmes avancés d'IA. Sa nature open-source et sa compatibilité avec les services de stockage cloud comme Oracle Cloud et Azure le rendent accessible à un large éventail d'utilisateurs.
Écosystème et intégration
Druid s'intègre avec une variété d'outils de traitement de données et de requêtes. Il prend en charge l'ingestion depuis Kafka, une plateforme de streaming populaire, et peut exporter des données vers des systèmes comme Apache Spark pour le traitement par lots. L'interface SQL de Druid, introduite dans les versions ultérieures, permet aux utilisateurs familiers avec le SQL standard d'interroger les données sans apprendre un langage propriétaire. Cela a élargi son adoption parmi les analystes de données et les ingénieurs.
Dans l'écosystème de l'IA, Druid complète souvent les pipelines de augmentation de données, fournissant un stockage rapide pour les caractéristiques traitées. Il peut également servir de backend pour les expériences de élagage de modèles, où les ingénieurs doivent comparer les métriques de performance entre les versions de modèles. La capacité du système à gérer des dimensions à haute cardinalité, telles que les identifiants d'utilisateurs ou les types d'appareils, le rend adapté aux systèmes de personnalisation et de recommandation.
Voir aussi
- Liste des SGBD orientés colonnes
- apprentissage automatique
- Observabilité
Références
- Documentation officielle d'Apache Druid
- Article de recherche sur la comparaison des performances de Hive, Presto et Druid (2019)
Liens externes
- Site officiel : druid.apache.org