Druid é um armazenamento de dados distribuído, de código aberto e orientado a colunas, escrito em Java. Ele foi projetado para ingerir rapidamente grandes quantidades de dados de eventos e fornecer consultas de baixa latência sobre esses dados. O nome Druid vem da classe de Druida metamorfo presente em muitos jogos de RPG, refletindo que a arquitetura do sistema pode se adaptar para resolver diferentes tipos de problemas de dados. Druid é comumente usado em aplicações de business intelligence e OLAP para analisar altos volumes de dados em tempo real e históricos, e tornou-se uma ferramenta fundamental em pipelines modernos de inteligência artificial e observabilidade.
Druid é usado em produção por empresas de tecnologia como Alibaba, Airbnb, Nielsen, Cisco, eBay, Lyft, Netflix, PayPal, Pinterest, Reddit, Twitter, Walmart, Wikimedia Foundation e Yahoo. Sua capacidade de lidar com consultas em menos de um segundo em dados de streaming o torna uma escolha popular para alimentar dashboards, detecção de anomalias e sistemas de tomada de decisão em tempo real, incluindo aqueles que suportam monitoramento de modelos de aprendizado de máquina e aplicações de IA generativa.
História
Druid foi iniciado em 2011 por Eric Tschetter, Fangjin Yang, Gian Merlino e Vadim Ogievetsky para alimentar o produto de análise da Metamarkets, uma empresa focada em análise de dados em tempo real para a indústria de publicidade. O projeto foi disponibilizado como código aberto sob a licença GPL em outubro de 2012, permitindo que desenvolvedores externos contribuíssem e adotassem a tecnologia. Em fevereiro de 2015, o projeto migrou para a Licença Apache, uma licença mais permissiva que facilitou uma adoção comercial mais ampla e a integração com outros ecossistemas de código aberto.
Desde sua abertura, Druid evoluiu por meio de contribuições de uma comunidade diversa, com grandes versões adicionando recursos como capacidades de ingestão aprimoradas, desempenho de consulta melhorado e melhor integração com sistemas de armazenamento em nuvem. A governança do projeto foi transferida para a Apache Software Foundation, onde permanece como um projeto de nível superior ativo.
Arquitetura
Totalmente implantado, Druid opera como um cluster de processos especializados, chamados de nós, para suportar uma arquitetura tolerante a falhas onde os dados são armazenados de forma redundante e não há um único ponto de falha. O cluster inclui dependências externas para coordenação, armazenamento de metadados e armazenamento profundo. O Apache ZooKeeper lida com a coordenação e eleições de líder, enquanto o armazenamento de metadados (por exemplo, MySQL, PostgreSQL ou Derby) rastreia informações de segmentos, e uma instalação de armazenamento profundo (por exemplo, HDFS ou Amazon S3) fornece backup permanente dos dados.
O design central separa os dados em segmentos imutáveis, que são particionados e replicados entre nós históricos. Os nós de tempo real lidam com dados de streaming recebidos, convertendo-os em segmentos que são então entregues aos nós históricos para armazenamento de longo prazo. Essa separação permite que Druid escale horizontalmente, adicionando nós para lidar com aumento de volume de dados ou carga de consultas sem interromper as operações existentes.
Gerenciamento de Consultas
As consultas dos clientes primeiro atingem os nós brokers, que as encaminham para os nós de dados apropriados, sejam históricos ou de tempo real. Como os segmentos do Druid podem ser particionados, uma consulta recebida pode exigir dados de múltiplos segmentos e partições, ou shards, armazenados em diferentes nós do cluster. Os brokers são capazes de descobrir quais nós possuem os dados necessários, mesclar resultados parciais e retornar o resultado agregado ao cliente. Esse mecanismo de consulta distribuída permite tempos de resposta em menos de um segundo, mesmo em conjuntos de dados que abrangem terabytes ou petabytes.
Gerenciamento de Cluster
As operações relacionadas ao gerenciamento de dados nos nós históricos são supervisionadas pelos nós coordenadores. Esses nós gerenciam o carregamento de segmentos, replicação e compactação, garantindo que os dados sejam distribuídos uniformemente e estejam disponíveis. O Apache ZooKeeper é usado para registrar todos os nós, gerenciar certos aspectos das comunicações entre nós e fornecer eleições de líder, o que ajuda a manter a consistência e a disponibilidade no cluster.
Recursos
Druid oferece vários recursos-chave que o distinguem dos bancos de dados tradicionais. Ele suporta ingestão de dados de streaming de baixa latência, permitindo que os usuários consultem dados em segundos após sua chegada. Ele permite exploração arbitrária de dados em fatias e cubos, o que significa que os usuários podem filtrar, agregar e agrupar dados em múltiplas dimensões sem consultas pré-definidas. Consultas analíticas em menos de um segundo são uma marca registrada do Druid, alcançadas por meio de pré-agregação, armazenamento colunar e indexação eficiente. Druid também fornece cálculos aproximados e exatos, dando aos usuários flexibilidade para equilibrar velocidade de consulta com precisão.
Esses recursos tornam o Druid bem adequado para casos de uso como observabilidade, onde métricas e logs de sistemas distribuídos precisam ser analisados em tempo real. No contexto de inteligência artificial, o Druid é frequentemente usado para armazenar e consultar dados de telemetria de execuções de treinamento de redes neurais ou para monitorar o desempenho de serviços de modelos de linguagem de grande escala implantados, permitindo detecção rápida de anomalias ou degradação.
Desempenho
Em 2019, pesquisadores compararam o desempenho de Hive, Presto e Druid usando um benchmark Star Schema desnormalizado baseado no padrão TPC-H. O Druid foi testado usando tanto uma configuração "Druid Best" com tabelas usando partições hash quanto uma configuração "Druid Suboptimal" que não usa partições hash. Os testes foram conduzidos executando as 13 consultas TPC-H usando o Fator de Escala TPC-H 30 (um banco de dados de 30GB), Fator de Escala 100 (um banco de dados de 100GB) e Fator de Escala 300 (um banco de dados de 300GB).
O desempenho do Druid foi medido como pelo menos 98% mais rápido que o Hive e pelo menos 90% mais rápido que o Presto em cada cenário, mesmo usando a configuração Druid Suboptimal. Essa vantagem dramática de velocidade decorre do formato de armazenamento colunar do Druid, que reduz I/O ao ler apenas as colunas necessárias para uma consulta, e do uso de agregações pré-computadas que evitam a varredura de dados brutos. Os resultados destacam a adequação do Druid para análises interativas onde a baixa latência é crítica, como em implantações de Amazon Web Services ou Google Cloud.
Casos de Uso em IA e Observabilidade
As capacidades de análise em tempo real do Druid tornaram-no um componente-chave em plataformas de observabilidade, onde ele ingere métricas, traces e logs de aplicações e infraestrutura. Empresas usam o Druid para alimentar dashboards que acompanham a saúde do sistema, detectam anomalias e suportam resposta a incidentes. Em aplicações de IA, o Druid é usado para armazenar e consultar dados de features para modelos de aprendizado de máquina, permitindo inferência em tempo real e monitoramento de modelos. Por exemplo, uma equipe implantando um modelo baseado em transformers pode usar o Druid para registrar latências de previsão e distribuições de entrada, e então consultar esses logs para identificar drift ou problemas de desempenho.
A integração do Druid com fluxos de trabalho de aprendizado profundo também está crescendo, à medida que organizações buscam analisar as vastas quantidades de telemetria geradas por clusters de treinamento. Ao fornecer consultas em menos de um segundo em dados de streaming, o Druid suporta a experimentação iterativa comum em aprendizado por reforço e outros paradigmas avançados de IA. Sua natureza de código aberto e compatibilidade com serviços de armazenamento em nuvem como Oracle Cloud e Azure o tornam acessível a uma ampla gama de usuários.
Ecossistema e Integração
Druid integra-se com uma variedade de ferramentas de processamento e consulta de dados. Ele suporta ingestão a partir do Kafka, uma plataforma popular de streaming, e pode exportar dados para sistemas como Apache Spark para processamento em lote. A interface SQL do Druid, introduzida em versões posteriores, permite que usuários familiarizados com SQL padrão consultem dados sem aprender uma linguagem proprietária. Isso ampliou sua adoção entre analistas de dados e engenheiros.
No ecossistema de IA, o Druid frequentemente complementa pipelines de aumento de dados, fornecendo um armazenamento rápido para features processadas. Ele também pode servir como backend para experimentos de poda de modelos, onde engenheiros precisam comparar métricas de desempenho entre versões de modelos. A capacidade do sistema de lidar com dimensões de alta cardinalidade, como IDs de usuários ou tipos de dispositivos, o torna adequado para sistemas de personalização e recomendação.
Ver Também
- Lista de SGBDs orientados a colunas
- aprendizado de máquina
- observabilidade
Referências
- Documentação oficial do Apache Druid
- Artigo de pesquisa sobre comparação de desempenho de Hive, Presto e Druid (2019)
Links Externos
- Site oficial: druid.apache.org