Cómo construimos una plataforma de monitoreo diseñada para el crecimiento exponencial de Databricks
por David Yuan, Yi Jin, Karan Bavishi, HC Zhu y Joey Beyda
La infraestructura de monitoreo de Databricks ha crecido más del triple en el último año, rastreando ahora 5 mil millones de series temporales activas en tiempo real e ingiriendo más de 10 billones de muestras por día. A esta escala masiva, descubrimos que las soluciones listas para usar eran ineficientes o difíciles de adaptar a nuestros requisitos. Esta publicación comparte lo que construimos en su lugar: una plataforma escalable que aprovecha lo mejor del ecosistema de monitoreo de código abierto, al tiempo que incorpora personalizaciones para nuestras necesidades únicas.
Los ingenieros de Databricks dependen de sistemas de monitoreo que nos alertan rápidamente sobre problemas, automatizan el escalado y las reversiones, y permiten la resolución de problemas inteligente. Estos sistemas deben ser altamente confiables para que podamos estar seguros de que no operaremos a ciegas durante un incidente potencial. Sin embargo, desarrollar esta infraestructura a la escala de Databricks demostró no ser tarea fácil:
Frente a estos desafíos, la antigua pila de monitoreo de Databricks sufría problemas de confiabilidad. Nos propusimos desarrollar una plataforma nueva y confiable que cumpliera con las expectativas de nuestros ingenieros. Desde entonces, hemos abordado 3 problemas clave:
Las TSDB son un componente central de las arquitecturas de sistemas de monitoreo tradicionales. Estas bases de datos especializadas están diseñadas para ingerir grandes cantidades de datos de métricas de series temporales y servir lecturas en tiempo real de alta QPS y baja latencia. Son especialmente óptimas para patrones de consulta de monitoreo como alertas y actualizaciones de paneles, que requieren emitir el mismo conjunto de consultas repetidamente y obtener resultados ultrarrápidos basados en los datos más recientes.
Las antiguas TSDB de Databricks se habían construido para una escala de magnitud inferior y se convirtieron en un cuello de botella importante para nosotros en los últimos años. De hecho, el problema de confiabilidad número 1 para toda la infraestructura de monitoreo fue la dificultad de escalar nuestras TSDB. Esta es una operación infrecuente para muchas otras empresas, pero algo que necesitábamos hacer casi a diario dado el crecimiento exponencial de Databricks.
Así que desarrollamos una nueva TSDB con el nombre en clave Pantheon, que es una bifurcación del proyecto de código abierto CNCF Thanos. Hemos escalado con éxito a más de 160 instancias de Thanos en todas las regiones en tres proveedores de nube, con un total de alrededor de 5 mil millones de series temporales activas en memoria y más de 10 billones de muestras ingeridas diariamente. Nuestra instancia más grande alberga alrededor de 300 millones de series temporales en memoria y admite casi 1000 consultas PromQL por segundo; también ejecutamos pequeñas implementaciones de 3 nodos y todo lo intermedio. Debido a la amplitud, escala y variedad de nuestras implementaciones, a menudo descubrimos casos extremos y optimizaciones de rendimiento de Thanos y los contribuimos a la comunidad de código abierto.
Migrar a Pantheon nos ha permitido ahorrar millones de dólares en costos anuales de nube, al tiempo que reducimos el tiempo de inactividad de la infraestructura de monitoreo en ~5 veces y eliminamos muchas fuentes de trabajo manual. La arquitectura de Pantheon se muestra a continuación, y las siguientes secciones explican varias decisiones clave de diseño que hicieron posibles estos logros.

Un elemento clave de Thanos es su arquitectura de almacenamiento por niveles. Las series temporales más recientes se mantienen en memoria, las series temporales de las últimas 24 horas se mantienen en disco y todos los datos más antiguos se mantienen en almacenamiento de objetos. Esto significa que las alertas y otras consultas en tiempo real pueden cumplir requisitos de rendimiento estrictos, ya que generalmente dependen de los datos más recientes. Al mismo tiempo, el uso de almacenamiento de objetos permite que el sistema desacople esencialmente el cómputo del almacenamiento; un clúster puede escalar sin necesidad de reequilibrar todos sus datos históricos en los nodos de la base de datos.
Esta arquitectura abordó nuestro cuello de botella clave (escalados) y sentó las bases para los ahorros de costos de Pantheon. Hemos aplicado varias optimizaciones adicionales:
A nuestra escala global, las operaciones manuales, la automatización de Kubernetes de "mejor esfuerzo" o los comportamientos genéricos de Thanos son insuficientes. Cada lanzamiento, evento de escalado o falla de host debe manejarse de manera segura, automática y con mínima intervención humana, preservando el quórum y la disponibilidad de los datos. Para lograr esto, Pantheon introduce un plano de control especialmente diseñado, responsable de orquestar el ciclo de vida y las decisiones de capacidad de los componentes de Thanos. Consta de tres controladores clave:
Los propietarios de métricas a menudo agregan etiquetas como el ID del nodo o el ID del pod para ayudarles a depurar problemas en dimensiones específicas y mitigar incidentes más rápido. Sin embargo, esto conduce a un desafío clásico de observabilidad: la gestión de la cardinalidad. La cardinalidad de una métrica es el número de combinaciones únicas de sus etiquetas. Si el número de pods que estás monitoreando aumenta 10 veces, también lo hace la cardinalidad de cualquier métrica con una etiqueta de ID de pod. La cardinalidad es el principal factor de escalado para una TSDB, y el crecimiento de la cardinalidad de las métricas existentes aumenta los costos y la presión de escalado en Pantheon.
El rápido crecimiento de la infraestructura es un desafío que tenemos en Databricks. Al mismo tiempo que nuestra base de clientes y el uso de productos han crecido significativamente, muchos clientes han adoptado recientemente nuestra arquitectura de computación serverless, y nuestra plataforma de cómputo serverless lanza decenas de millones de VMs diariamente. A medida que más cargas de trabajo se trasladan a serverless, la infraestructura que monitoreamos se vuelve de mayor rotación, y la vida útil de estas etiquetas identificadoras se acorta cada vez más.
Esto ha provocado que la cardinalidad se dispare, mermando las ventajas de escalabilidad y costo de Pantheon. Por lo tanto, tuvimos que ser mucho más inteligentes sobre qué datos de métricas almacenábamos. Aquí es donde entró la “agregación”: descartar etiquetas costosas de los sistemas serverless durante la ingesta, al tiempo que se proporciona una vista agregada de toda la flota a los propietarios del servicio. Una estrategia de agregación automatizada para métricas nos ha permitido “doblar la curva” del crecimiento de la cardinalidad, asegurando que la infraestructura de monitoreo no necesite escalar más rápido que el resto de Databricks.
Construir una infraestructura de agregación confiable a escala es difícil porque es stateful. Los agregadores que gestionan millones de contadores de entrada deben ser capaces de manejar reinicios correctamente: si una serie temporal de entrada desaparece, el valor de salida agregado debe seguir aumentando monótonamente en lugar de disminuir. Con las métricas particionadas entre agregadores, también debes manejar escenarios como reinicios de pods y desequilibrio de carga.
Estos problemas a menudo se resuelven utilizando un sistema de mensajería como Kafka para las asignaciones de partición y el mantenimiento de datos anteriores; esto es costoso a nuestra escala y agrega un retraso en la ingesta que impacta los casos de uso en tiempo real. El enfoque alternativo es almacenar el estado en memoria en los agregadores y redirigir las métricas entre agregadores para honrar la asignación. Sin embargo, esto conduce a la pérdida de datos cuando se redespliega un agregador; en una versión inicial de nuestra infraestructura de agregación, este comportamiento hizo que las métricas agregadas fueran casi ininteligibles para nuestros usuarios.
Para que esto funcione sin problemas, desarrollamos nuestro propio sistema de agregación utilizando Telegraf y el servicio “auto-sharder” de Databricks Dicer. Esta arquitectura utiliza enrutamiento inteligente y pegajoso en lugar de redirigir métricas entre agregadores, lo que abordó los modos de falla de redespliegue. Con otras optimizaciones que hemos agregado sobre Telegraf, hemos podido escalar el pipeline a más de 1 GB/s en nuestra región más grande y miles de reglas de agregación.

Este nuevo pipeline de agregación se convirtió efectivamente en el escudo que protege nuestras TSDBs del crecimiento de cardinalidad a largo plazo, así como de los picos inesperados de métricas. Por ejemplo, un incidente reciente en la infraestructura de Databricks resultó en un aumento de 2 a 5 veces en la carga de métricas en varias regiones. Telegraf absorbió la mayor parte de esta carga, y Pantheon solo vio un aumento del 20%, lo que permitió a los ingenieros de toda la empresa ejecutar consultas de depuración y alerta sin ningún impacto.
Nuestra infraestructura de agregación nos permite proteger a Pantheon del crecimiento exponencial de la cardinalidad, pero esto tiene un costo: elimina las dimensiones exactas que los ingenieros necesitan durante los incidentes. Considere una flota global con:
Las métricas agregadas te dicen:
Pero no te dicen:
Los ingenieros de Databricks todavía necesitaban una solución para solucionar problemas de flujos de trabajo que dependieran de estas etiquetas de alta cardinalidad. Estos escenarios de “buscar una aguja en un pajar” requerían almacenar y procesar eficientemente grandes cantidades de datos sin procesar, lo que Pantheon no podía hacer. Para soportar estos casos de uso, buscamos una arquitectura de almacenamiento diferente que no estuviera limitada por el crecimiento de la cardinalidad.
Nuestra idea clave: ¡el lakehouse de Databricks es un ajuste perfecto! Desacopla el almacenamiento (almacenamiento de objetos económico + Delta Lake) del cómputo (streaming + clústeres de consulta) y es masivamente escalable en ambas dimensiones.
Utilizando lo mejor de las capacidades de Databricks, desarrollamos una nueva plataforma para datos de solución de problemas sin procesar llamada Hydra, que ha hecho que la depuración de alta cardinalidad sea práctica a escala masiva. Hydra ingiere 20 mil millones de series temporales activas y sin agregar de millones de nodos en todo el mundo, al tiempo que logra una frescura de datos de extremo a extremo de 5 minutos y un almacenamiento de datos 50 veces más económico que Thanos.
Estas victorias fueron posibles gracias al diseño nativo del lakehouse de Hydra:

Construir Hydra no fue solo un desafío de infraestructura; fue un desafío de diseño de interfaz. Desde el principio, diseñamos Hydra en torno a los Viajes Críticos del Usuario (CUJs) para nuestros ingenieros en lugar de en torno a las capas de almacenamiento o los pipelines de ingesta. Nuestro objetivo era simple: los ingenieros deberían poder trabajar con métricas de alta cardinalidad utilizando las mismas interfaces en las que ya confían.
Consultas a través de Grafana
La mayoría de los ingenieros comienzan su flujo de trabajo de depuración en Grafana. Esperan escribir PromQL, usar paneles existentes, profundizar en las etiquetas y pivotar rápidamente durante los incidentes.
Para preservar este flujo de trabajo, Hydra se integra directamente con Grafana al permitir que las consultas PromQL se ejecuten contra los datos almacenados en Databricks. Construimos una capa de conversión de PromQL a SQL que traduce las expresiones PromQL en consultas SQL ejecutadas en tablas Delta en el Lakehouse. Este enfoque permite a los ingenieros continuar utilizando la sintaxis y los paneles PromQL familiares sin modificaciones. Al mismo tiempo, las consultas subyacentes se ejecutan contra tablas Delta a gran escala en lugar de una TSDB en memoria.
Acceso SQL Directo en Databricks
Si bien Grafana es ideal para la depuración en vivo, algunas investigaciones requieren un análisis más profundo. Los ingenieros pueden necesitar unir métricas con metadatos de implementación, correlacionar métricas con registros, ejecutar escaneos de rangos de tiempo amplios, realizar detección de anomalías o exportar conjuntos de datos para análisis avanzados.
Hydra también expone las tablas de Delta subyacentes directamente dentro de Databricks. Los ingenieros pueden consultar estas tablas usando Databricks SQL o notebooks, lo que permite un análisis flexible que va más allá de los flujos de trabajo de monitoreo tradicionales.
Dado que los datos residen en el Lakehouse, se pueden unir con otros conjuntos de datos empresariales y se rigen bajo los mismos controles de seguridad y acceso. Esto convierte los datos de observabilidad en un activo analítico de primera clase en lugar de un silo de monitoreo aislado.
Semántica Unificada de Métricas
Un principio de diseño clave de Hydra es que los ingenieros no deben necesitar comprender nuestra arquitectura de ingesta. Ya sea que una métrica se acceda a través de la ruta agregada respaldada por TSDB o la ruta de métricas sin procesar respaldada por Lakehouse, la interfaz sigue siendo consistente.
Los nombres de las métricas, la semántica de las etiquetas y las dimensiones de los metadatos están unificados en todos los entornos. Los equipos de servicio emiten métricas una vez utilizando una interfaz estandarizada. La plataforma maneja la agregación, la preservación sin procesar, la ingesta, el almacenamiento y el enrutamiento de consultas. Este modelo unificado reduce la carga cognitiva y elimina la necesidad de que los equipos administren configuraciones separadas para diferentes backends de observabilidad.
En el futuro, estamos buscando mejorar el rendimiento de Hydra para que logre una frescura de datos similar a la de Pantheon y las dos experiencias converjan aún más.
Para escalar la infraestructura de monitoreo de Databricks, hemos necesitado optimizar la confiabilidad, la eficiencia, la operabilidad y las experiencias de los desarrolladores. "Escalar" para nosotros ha significado más que solo aumentar nuestras implementaciones. Ha significado:
Estos serán viajes interminables para nosotros, y son ilustrativos de por qué la ingeniería de infraestructura es un espacio tan dinámico en Databricks. Si te gusta resolver problemas de ingeniería difíciles y te gustaría unirte a nosotros en el viaje, visita databricks.com/careers!
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
Suscríbete a nuestro blog y recibe las últimas publicaciones directamente en tu bandeja de entrada.