Druid es un almacén de datos distribuido, de código abierto y orientado a columnas, escrito en Java. Está diseñado para ingerir rápidamente grandes cantidades de datos de eventos y proporcionar consultas de baja latencia sobre esos datos. El nombre Druid proviene de la clase de druida metamórfico en muchos juegos de rol, lo que refleja que la arquitectura del sistema puede transformarse para resolver diferentes tipos de problemas de datos. Druid se utiliza comúnmente en aplicaciones de inteligencia empresarial y OLAP para analizar grandes volúmenes de datos en tiempo real e históricos, y se ha convertido en una herramienta fundamental en los pipelines modernos de inteligencia artificial y observabilidad.
Druid se utiliza en producción por empresas tecnológicas como Alibaba, Airbnb, Nielsen, Cisco, eBay, Lyft, Netflix, PayPal, Pinterest, Reddit, Twitter, Walmart, la Fundación Wikimedia y Yahoo. Su capacidad para manejar consultas de subsegundos sobre datos en streaming lo convierte en una opción popular para impulsar paneles de control, detección de anomalías y sistemas de toma de decisiones en tiempo real, incluidos aquellos que respaldan el monitoreo de modelos de aprendizaje automático y aplicaciones de IA generativa.
Historia
Druid fue iniciado en 2011 por Eric Tschetter, Fangjin Yang, Gian Merlino y Vadim Ogievetsky para impulsar el producto de análisis de Metamarkets, una empresa centrada en el análisis de datos en tiempo real para la industria publicitaria. El proyecto se publicó como código abierto bajo la licencia GPL en octubre de 2012, lo que permitió a desarrolladores externos contribuir y adoptar la tecnología. En febrero de 2015, el proyecto pasó a la Licencia Apache, una licencia más permisiva que facilitó una adopción comercial más amplia y la integración con otros ecosistemas de código abierto.
Desde su publicación como código abierto, Druid ha evolucionado gracias a las contribuciones de una comunidad diversa, con versiones principales que añaden características como capacidades de ingesta mejoradas, un rendimiento de consultas mejorado y una mejor integración con sistemas de almacenamiento en la nube. La gobernanza del proyecto se transfirió a la Apache Software Foundation, donde sigue siendo un proyecto de nivel superior activo.
Arquitectura
Cuando está completamente implementado, Druid se ejecuta como un clúster de procesos especializados, llamados nodos, para respaldar una arquitectura tolerante a fallos donde los datos se almacenan de manera redundante y no hay un único punto de fallo. El clúster incluye dependencias externas para la coordinación, el almacenamiento de metadatos y el almacenamiento profundo. Apache ZooKeeper maneja la coordinación y las elecciones de líder, mientras que el almacenamiento de metadatos (por ejemplo, MySQL, PostgreSQL o Derby) rastrea la información de los segmentos, y una instalación de almacenamiento profundo (por ejemplo, HDFS o Amazon S3) proporciona una copia de seguridad permanente de los datos.
El diseño central separa los datos en segmentos inmutables, que se particionan y replican en nodos históricos. Los nodos en tiempo real manejan los datos de streaming entrantes, convirtiéndolos en segmentos que luego se entregan a los nodos históricos para su almacenamiento a largo plazo. Esta separación permite que Druid se escale horizontalmente, añadiendo nodos para manejar un mayor volumen de datos o carga de consultas sin interrumpir las operaciones existentes.
Gestión de consultas
Las consultas de los clientes llegan primero a los nodos broker, que las reenvían a los nodos de datos apropiados, ya sean históricos o en tiempo real. Dado que los segmentos de Druid pueden estar particionados, una consulta entrante puede requerir datos de múltiples segmentos y particiones, o shards, almacenados en diferentes nodos del clúster. Los brokers pueden aprender qué nodos tienen los datos requeridos, fusionar resultados parciales y devolver el resultado agregado al cliente. Este motor de consultas distribuido permite tiempos de respuesta de subsegundos incluso en conjuntos de datos que abarcan terabytes o petabytes.
Gestión del clúster
Las operaciones relacionadas con la gestión de datos en los nodos históricos son supervisadas por nodos coordinadores. Estos nodos gestionan la carga de segmentos, la replicación y la compactación, asegurando que los datos estén distribuidos uniformemente y disponibles. Apache ZooKeeper se utiliza para registrar todos los nodos, gestionar ciertos aspectos de las comunicaciones entre nodos y proporcionar elecciones de líder, lo que ayuda a mantener la consistencia y la disponibilidad en el clúster.
Características
Druid ofrece varias características clave que lo distinguen de las bases de datos tradicionales. Admite la ingesta de datos en streaming de baja latencia, lo que permite a los usuarios consultar datos en cuestión de segundos después de su llegada. Permite la exploración de datos arbitraria en múltiples dimensiones, lo que significa que los usuarios pueden filtrar, agregar y agrupar datos en múltiples dimensiones sin consultas predefinidas. Las consultas analíticas de subsegundos son un sello distintivo de Druid, logrado mediante pre-agregación, almacenamiento en columnas e indexación eficiente. Druid también proporciona cálculos tanto aproximados como exactos, dando a los usuarios flexibilidad para equilibrar la velocidad de consulta con la precisión.
Estas características hacen que Druid sea muy adecuado para casos de uso como la observabilidad, donde las métricas y los registros de sistemas distribuidos deben analizarse en tiempo real. En el contexto de la inteligencia artificial, Druid se utiliza a menudo para almacenar y consultar datos de telemetría de ejecuciones de entrenamiento de redes neuronales o para monitorear el rendimiento de servicios de modelos de lenguaje grandes implementados, lo que permite la detección rápida de anomalías o degradación.
Rendimiento
En 2019, los investigadores compararon el rendimiento de Hive, Presto y Druid utilizando un Star Schema Benchmark desnormalizado basado en el estándar TPC-H. Druid se probó tanto con una configuración "Druid Best" utilizando tablas con particiones hash como con una configuración "Druid Suboptimal" que no utiliza particiones hash. Las pruebas se realizaron ejecutando las 13 consultas TPC-H con TPC-H Scale Factor 30 (una base de datos de 30GB), Scale Factor 100 (una base de datos de 100GB) y Scale Factor 300 (una base de datos de 300GB).
El rendimiento de Druid se midió como al menos un 98% más rápido que Hive y al menos un 90% más rápido que Presto en cada escenario, incluso utilizando la configuración Druid Suboptimized. Esta ventaja de velocidad dramática proviene del formato de almacenamiento en columnas de Druid, que reduce la E/S al leer solo las columnas necesarias para una consulta, y su uso de agregaciones precalculadas que evitan escanear datos sin procesar. Los resultados destacan la idoneidad de Druid para análisis interactivos donde la baja latencia es crítica, como en implementaciones de Amazon Web Services o Google Cloud.
Casos de uso en IA y observabilidad
Las capacidades de análisis en tiempo real de Druid lo han convertido en un componente clave en plataformas de observabilidad, donde ingiere métricas, trazas y registros de aplicaciones e infraestructura. Las empresas utilizan Druid para impulsar paneles que rastrean la salud del sistema, detectan anomalías y respaldan la respuesta a incidentes. En aplicaciones de IA, Druid se utiliza para almacenar y consultar datos de características para modelos de aprendizaje automático, lo que permite la inferencia en tiempo real y el monitoreo de modelos. Por ejemplo, un equipo que implementa un modelo basado en transformers podría usar Druid para registrar latencias de predicción y distribuciones de entrada, y luego consultar esos registros para identificar deriva o problemas de rendimiento.
La integración de Druid con flujos de trabajo de aprendizaje profundo también está creciendo, ya que las organizaciones buscan analizar las vastas cantidades de telemetría generadas por los clústeres de entrenamiento. Al proporcionar consultas de subsegundos sobre datos en streaming, Druid respalda la experimentación iterativa común en aprendizaje por refuerzo y otros paradigmas avanzados de IA. Su naturaleza de código abierto y su compatibilidad con servicios de almacenamiento en la nube como Oracle Cloud y Azure lo hacen accesible para una amplia gama de usuarios.
Ecosistema e integración
Druid se integra con una variedad de herramientas de procesamiento de datos y consultas. Admite la ingesta desde Kafka, una plataforma de streaming popular, y puede exportar datos a sistemas como Apache Spark para procesamiento por lotes. La interfaz SQL de Druid, introducida en versiones posteriores, permite a los usuarios familiarizados con SQL estándar consultar datos sin aprender un lenguaje propietario. Esto ha ampliado su adopción entre analistas de datos e ingenieros.
En el ecosistema de IA, Druid a menudo complementa los pipelines de aumento de datos, proporcionando un almacén rápido para características procesadas. También puede servir como backend para experimentos de poda de modelos, donde los ingenieros necesitan comparar métricas de rendimiento entre versiones de modelos. La capacidad del sistema para manejar dimensiones de alta cardinalidad, como identificadores de usuario o tipos de dispositivo, lo hace adecuado para sistemas de personalización y recomendación.
Véase también
- Lista de sistemas de gestión de bases de datos orientados a columnas
- aprendizaje automático
- observabilidad
Referencias
- Documentación oficial de Apache Druid
- Artículo de investigación sobre la comparación de rendimiento de Hive, Presto y Druid (2019)
Enlaces externos
- Sitio web oficial: druid.apache.org