El Éxito de Uber con Apache Pinot: Ahorros de Costos y Mejora de Rendimiento

Para una compañía como Uber, los datos en tiempo real son la esencia de los servicios dirigidos tanto a los clientes como a los servicios internos. Los clientes confían en los datos en tiempo real para obtener viajes y pedir comida a su conveniencia. Los equipos internos también dependen de datos actualizados para impulsar la infraestructura detrás de sus aplicaciones dirigidas a los clientes, como la herramienta interna que supervisa la analítica de caídas de aplicaciones móviles.

Uber migró a Apache Pinot para impulsar esta herramienta interna y experimentó mejoras significativas en comparación con su motor de análisis previo (Elasticsearch). Al cambiar a Pinot, una verdadera plataforma de análisis en tiempo real, Uber vio beneficios que incluyen:

  • Una reducción del 70% en los costos de infraestructura (un ahorro de más de $2M anuales)
  • Una reducción del 80% en núcleos de CPU
  • Una reducción del 66% en la huella de datos
  • Una reducción del 64% en los tiempos de carga de páginas (de 14 segundos a menos de 5 segundos)
  • Reducción del lag de ingesta a <10 milisegundos
  • Disminución de los tiempos de espera de las consultas y eliminación del problema de pérdida de datos

Ver Ahora

El contenido de este blog se basa en una reunión presencial que presentó historias de usuarios de Apache Pinot. También hacemos referencia a un blog del equipo de ingeniería de Uber que cubre cómo utilizan Pinot para servir análisis en tiempo real de caídas de aplicaciones móviles. Vea la reunión aquí:

O continúe leyendo para aprender cómo Uber logró estos resultados con Apache Pinot.

Cómo Uber entrega análisis en tiempo real sobre caídas de aplicaciones móviles

Uber tiene una canalización de ingesta automatizada que rastrea las caídas de aplicaciones y recopila datos para la investigación. Parte de estos datos se ingieren en Apache Flink para realizar transformaciones, que luego se devuelven a temas de Kafka para su consumo en la cadena posterior. Estos eventos en bruto y procesados en Kafka son consumidos por Apache Pinot, que ejecuta consultas analíticas cuyos resultados se entregan a usuarios internos a través de Grafana y herramientas de visualización internas. Su canalización ingiere tanto datos en tiempo real como datos fuera de línea (no representados) para crear una vista completa de los usuarios, conocida como tablas híbridas en Apache Pinot.

Análisis de Caídas de Aplicaciones en Tiempo Real con Apache Pinot

Uber libera aproximadamente 11,000 cambios de código e infraestructura cada semana, y confía en una herramienta interna (Healthline) para ayudar a detectar y resolver problemas de caídas. Healthline permite a Uber medir y cumplir mejor su Tiempo Medio para Detectar (MTTD). Por ejemplo, podrían lanzar una nueva función que cause caídas inesperadas de la aplicación y deben poder rastrear rápidamente la fuente de las caídas al indagar en los datos de las caídas.

El panel a continuación muestra una semana de datos de caídas para una aplicación móvil y una versión del sistema operativo. En este ejemplo, los eventos de sesión ocurren hasta cientos de miles de veces por segundo, y las caídas miden entre 15,000 y 20,000 eventos por segundo. Uber combina estas métricas para calcular la tasa de fatal-free, que indica la salud de la aplicación (el objetivo es estar lo más cerca posible del 100%).

Con Elasticsearch, un motor de búsqueda de propósito general, los picos en las tasas de fallos causarían retrasos en la ingesta y retrasarían la respuesta del equipo para identificar problemas. Al migrar a Apache Pinot, diseñado específicamente para análisis en tiempo real a gran escala, el equipo ha observado una disminución en la cantidad y gravedad de los retrasos en la ingesta.

Análisis en Profundidad de Datos de Accidentes

Además de la visión de alto nivel de los datos de accidentes, Uber también proporciona análisis detallados a nivel de accidente. Agrupan métricas de accidentes a través de diversas dimensiones, como el número de accidentes por sistema operativo y por versión, y la distribución de accidentes por versión. Este caso de uso aprovecha varios índices de Pinot (de rango, invertido y de texto) para indicar cuándo ha ocurrido un tipo de accidente, qué versiones están afectadas, el número de ocurrencias y el número de usuarios y dispositivos afectados.

Para el análisis detallado, fue crucial que Uber tuviera capacidades de búsqueda de texto para leer mensajes de error de accidentes. El índice de texto de Pinot se basa en Lucene y les permite buscar accidentes por mensaje de accidente, nombre de clase, rastrear la traza de pila y más.

Medición de Sesiones a Escala

Uber también utiliza Pinot para medir sesiones únicas por dispositivo, versión, sistema operativo y hora a gran escala. Pinot ofrece procesamiento en tiempo real con una alta capacidad de procesamiento capaz de ingerir los 300,000 eventos analíticos por segundo de Uber. El equipo tiene una configuración híbrida que incluye una tabla en tiempo real con una granularidad de 10 minutos y una retención de datos de 3 días, así como una tabla fuera de línea con granularidad horaria y diaria y una retención de datos de 45 días.

Aprovechando el HyperLogLog de Apache Pinot, el equipo logró reducir el número de eventos almacenados y realizar menos agregaciones únicas a través de los eventos. Pinot también ofreció latencias muy bajas, por debajo de los 100 milisegundos para la latencia p99.5.

Ahorros en Costos de Infraestructura

Según los cálculos de Uber, han ahorrado más de $2 millones en costos de infraestructura anuales al migrar a Pinot. Su configuración de Pinot resultó en una disminución del 70% en costos de infraestructura en comparación con Elasticsearch. También experimentaron una reducción del 80% en núcleos de CPU y una disminución del 66% en su huella de datos.

Con Elasticsearch, Uber utilizaba 22,000 núcleos de CPU. Con Pinot, redujeron ese número en un 80%. Aquí hay una instantánea de su configuración de Pinot:

Mejora en el Rendimiento de Consultas y Experiencia del Usuario

Con Apache Pinot, Uber puede ofrecer una mejor experiencia de usuario con una carga de páginas más rápida y una mayor confiabilidad. La migración a Pinot redujo los tiempos de carga de páginas en un 64%, de 14 segundos a menos de 5 segundos. Pinot también tiene una mejor tolerancia a picos de carga, lo que lleva a una recuperación más rápida de retrasos. Incluso si el equipo experimenta un retraso en la ingesta, Pinot es capaz de recuperarse rápidamente en unos minutos.

En comparación con Elasticsearch, Pinot también ha mostrado mejoras significativas en los tiempos de tiempo de espera de consultas y pérdida de datos. Si ocurriera un desastre en una aplicación móvil mientras se utilizaba Elasticsearch, las consultas relacionadas con ese índice tendrían tiempo de espera. Uber resolvió este problema con Pinot controlando el tamaño del segmento. El equipo tampoco tiene problemas de pérdida de datos con Pinot, a diferencia de los frecuentes problemas de datos cuando Elasticsearch manejaba un mayor flujo de ingesta.

La Próxima Iteración de la Configuración de Pinot de Uber

A continuación, Uber planea migrar a la indexación de texto nativo para sus datos de fallas móviles. Sus datos de fallas móviles contienen una gran cantidad de datos estructurados, lo que hace posible que el equipo migre todos sus casos de uso a índices de texto nativos. Esta transición proporcionará ahorros de costos en almacenamiento de datos y reducirá el tiempo dedicado a consultar datos.

Uber no es la única organización que ve éxito al migrar de Elasticsearch a Pinot

Uniqode (anteriormente Beaconstac) experimentó una mejora de 10 veces en el rendimiento general de las consultas al cambiar de Elasticsearch a Pinot. Cisco Webex también migró su análisis y observabilidad en tiempo real a Pinot después de enfrentar altas latencias. El equipo de Webex descubrió que Apache Pinot ofrecía latencias 5 veces a 150 veces más bajas que Elasticsearch.

Source:
https://dzone.com/articles/real-time-app-crash-analytics-with-apache-pinot