Le succès d’Uber avec Apache Pinot : Économies de coûts et augmentation des performances

Pour une entreprise comme Uber, les données en temps réel représentent le sang vital de leurs services destinés aux clients et internes. Les clients comptent sur ces données pour obtenir des trajets et commander de la nourriture à leur convenance. Les équipes internes dépendent également des données à jour pour alimenter l’infrastructure derrière leurs applications destinées aux clients, telles que l’outil interne qui surveille l’analytique des crashes des applications mobiles.

Uber a migré vers Apache Pinot pour alimenter cet outil interne et a constaté des améliorations significatives par rapport à leur précédent moteur d’analyse (Elasticsearch). En adoptant Pinot, une véritable plateforme d’analyse en temps réel, Uber a bénéficié de plusieurs avantages, notamment :

  • Une réduction de 70% des coûts d’infrastructure (économies de plus de 2 millions de dollars par an)
  • Une diminution de 80% des cœurs de processeur
  • Une réduction de 66% de la taille des données
  • Une réduction de 64% des temps de chargement des pages (de 14 secondes à moins de 5 secondes)
  • Réduction de l’ingestion à moins de 10 millisecondes
  • Diminution des temps d’attente des requêtes et élimination de l’éventualité de perte de données

Regardez maintenant

Le contenu de ce blog est basé sur une rencontre en personne qui a présenté des témoignages d’utilisateurs d’Apache Pinot. Nous nous référons également à un blog de l’équipe ingénierie d’Uber qui couvre comment ils utilisent Pinot pour fournir des analyses en temps réel pour les crashes des applications mobiles. Regardez la rencontre ici :

Ou continuez à lire pour découvrir comment Uber a réalisé ces résultats avec Apache Pinot.

Comment Uber fournit des analyses en temps réel sur les crashes des applications mobiles

Uber possède un pipeline d’ingestion automatisé qui suit les crashes des applications et collecte des données d’investigation. Une partie de ces données est ingérée dans Apache Flink pour des transformations, puis remise dans des sujets Kafka pour une consommation en aval. Ces événements bruts et traités dans Kafka sont ensuite consommés par Apache Pinot, qui exécute des requêtes analytiques dont les résultats sont livrés aux utilisateurs internes via Grafana et des outils de visualisation internes. Leur pipeline ingère à la fois des données en temps réel et hors ligne (non représentées) pour créer une vue complète des utilisateurs, connue sous le nom de tables hybrides dans Apache Pinot.

Analytique des crashes d’applications en temps réel avec Apache Pinot

Uber publie environ 11 000 nouveaux changements de code et d’infrastructure chaque semaine, et s’appuie sur un outil interne (Healthline) pour aider à détecter et résoudre les problèmes de crash. Healthline permet à Uber de mieux mesurer et de respecter son Temps Moyen de Détection (MTTD). Par exemple, ils pourraient lancer une nouvelle fonctionnalité causant des crashes inattendus de l’application et doivent pouvoir rapidement cibler la source des crashes en creusant dans les données de crash.

Le tableau de bord ci-dessous présente une semaine de données de crash pour une application mobile et une version du système d’exploitation. Dans cet exemple, les événements de session se produisent jusqu’à des centaines de milliers de fois par seconde, et les crashes mesurent entre 15 000 à 20 000 événements par seconde. Uber combine ces métriques pour calculer le taux de non-fatalité, qui indique la santé de l’application (l’objectif étant d’être aussi proche de 100% que possible).

Avec Elasticsearch, un moteur de recherche généraliste, les pics de taux de crash provoquaient des retards d’ingestion et retardaient la réaction de l’équipe à l’identification des problèmes. En passant à Apache Pinot, conçu spécifiquement pour l’analyse en temps réel à grande échelle, l’équipe a constaté une diminution du nombre et de la gravité des retards d’ingestion.

Analyse approfondie des données de crash

En plus de l’aperçu général des données de crash, Uber fournit également une analyse approfondie au niveau des crashs. Ils agrègent les métriques de crashs selon diverses dimensions telles que le nombre de crashs par système d’exploitation et par version, et la répartition des crashs par version. Ce cas d’utilisation exploite plusieurs index Pinot (range, inversé et texte) pour partager quand un type de crash s’est produit, quelles versions sont impactées, le nombre d’occurrences, et le nombre d’utilisateurs et de dispositifs touchés.

Pour l’analyse approfondie, il était crucial qu’Uber dispose de capacités de recherche textuelle pour lire les messages d’erreur de crash. L’index textuel de Pinot est construit sur Lucene et leur permet de rechercher les crashs par message de crash, nom de classe, pile d’exécution, et plus encore.

Mesure des sessions à grande échelle

Uber utilise également Pinot pour mesurer les sessions uniques par dispositif, version, système d’exploitation et heure à grande échelle. Pinot offre un traitement en temps réel avec un débit à grande échelle capable d’ingérer les 300 000 événements analytiques par seconde d’Uber. L’équipe dispose d’une configuration hybride incluant une table en temps réel avec une granularité de 10 minutes et une rétention de données de 3 jours, ainsi qu’une table hors ligne avec une granularité horaire et quotidienne et une rétention de données de 45 jours.

En tirant parti de l’HyperLogLog d’Apache Pinot, l’équipe a pu réduire le nombre d’événements stockés et effectuer moins d’agrégations uniques à travers les événements. Pinot a également offert des latences très faibles — moins de 100 millisecondes pour la latence p99.5.

Économies de coûts d’infrastructure

Selon les calculs d’Uber, ils ont économisé plus de 2 millions de dollars en coûts d’infrastructure annuels en migré vers Pinot. Leur configuration Pinot a conduit à une diminution de 70% des coûts d’infrastructure par rapport à Elasticsearch. Ils ont également constaté une réduction de 80% des cœurs de CPU et une diminution de 66% de leur empreinte de données.

Avec Elasticsearch, Uber utilisait 22 000 cœurs de CPU. Avec Pinot, ils ont réduit ce nombre de 80%. Voici un instantané de leur configuration Pinot:

Amélioration des performances des requêtes et de l’expérience utilisateur

Avec Apache Pinot, Uber est en mesure de livrer une meilleure expérience utilisateur avec un temps de chargement de page plus rapide et une fiabilité améliorée. La migration vers Pinot a réduit les temps de chargement de page de 64%, passant de 14 secondes à moins de 5 secondes. Pinot est également plus tolérant aux pics de charge, ce qui conduit à une récupération plus rapide des retards. Même si l’équipe constate un retard d’ingestion, Pinot est capable de se rétablir rapidement en quelques minutes.

Par rapport à Elasticsearch, Pinot a également montré des améliorations significatives en termes de délais de requête et de perte de données. Si une catastrophe sur une application mobile se produisait en utilisant Elasticsearch, les requêtes concernant cet index seraient en timeout. Uber a résolu ce problème avec Pinot en contrôlant la taille des segments. L’équipe n’a également aucun problème de perte de données avec Pinot, par rapport à des problèmes fréquents de données lorsque Elasticsearch traitait un débit d’ingestion accru.

La prochaine itération de la configuration Pinot d’Uber

Ensuite, Uber prévoit de migrer vers l’indexation de texte natif pour leurs données de crash mobiles. Leurs données de crash mobiles contiennent beaucoup de données structurées, ce qui rend possible pour l’équipe de migrer tous leurs cas d’utilisation vers des index de texte natifs. Cette transition permettra des économies de coûts sur le stockage des données et réduira le temps passé à interroger les données.

Uber n’est pas le seul organisme à connaître le succès en migrant d’Elasticsearch vers Pinot

Uniqode (anciennement Beaconstac) a constaté une amélioration de 10 fois de la performance globale des requêtes en passant d’Elasticsearch à Pinot. Cisco Webex a également migré leurs analyses en temps réel et l’observabilité vers Pinot après avoir rencontré des latences élevées. L’équipe Webex a constaté que Apache Pinot offrait des latences 5 à 150 fois inférieures à celles d’Elasticsearch.

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