Il Successo di Uber Con Apache Pinot: Risparmi sui Costi e Miglioramento delle Prestazioni

Per un’azienda come Uber, i dati in tempo reale rappresentano il sangue vitale sia per i servizi rivolti ai clienti che per quelli interni. I clienti dipendono da dati in tempo reale per prendere i loro viaggi e prendere il cibo a loro comodità. Anche i team interni dipendono da dati aggiornati per alimentare l’infrastruttura dietro le applicazioni rivolte ai clienti, come ad esempio lo strumento in-house che monitora le analisi delle crash delle app mobili.

Uber ha migrato ad Apache Pinot per alimentare questo strumento in-house e ha riscontrato miglioramenti significativi rispetto al loro precedente motore di analisi (Elasticsearch). Passando a Pinot, una vera piattaforma di analisi in tempo reale, Uber ha visto benefici tra cui:

  • riduzione del 70% dei costi di infrastruttura (risparmio di oltre $2M all’anno)
  • riduzione del 80% dei core CPU
  • riduzione del 66% dell’impronta dati
  • riduzione del 64% dei tempi di caricamento delle pagine (da 14 secondi a meno di 5 secondi)
  • Riduzione del ritardo di ingestione a <10 millisecondi
  • Diminuzione dei timeout delle query e eliminazione del problema di perdita di dati

Guarda ora

Il contenuto di questo blog si basa su un incontro faccia a faccia che presentava storie di utenti di Apache Pinot. Citiamo anche un blog del team ingegneristico di Uber che spiega come utilizzano Pinot per fornire analisi in tempo reale per le crash delle app mobili. Guarda l’incontro qui:

O continua a leggere per scoprire come Uber ha ottenuto questi risultati con Apache Pinot.

Come Uber fornisce analisi in tempo reale sulle crash delle app mobili

Uber dispone di una pipeline di ingestione automatizzata che traccia i crash dell’app e raccoglie dati per indagini. Parte di questi dati viene ingerita in Apache Flink per le trasformazioni, che poi vengono reinserite nei topic di Kafka per il consumo downstream. Questi eventi grezzi e elaborati in Kafka vengono quindi consumati da Apache Pinot, che esegue query analitiche le cui risultate vengono consegnate agli utenti interni attraverso Grafana e strumenti di visualizzazione interni. La loro pipeline ingerisce sia dati in tempo reale che offline (non rappresentati) per creare una visione completa degli utenti, note come tabelle ibride in Apache Pinot.

Analisi dei Crash dell’App in Tempo Reale con Apache Pinot

Uber rilascia circa 11.000 nuovi cambiamenti di codice e infrastruttura ogni settimana e si affida a uno strumento interno (Healthline) per aiutare a rilevare e risolvere problemi di crash. Healthline consente a Uber di misurare e raggiungere meglio il suo Tempo Medio per il Rilevamento (MTTD). Ad esempio, potrebbero implementare una nuova funzionalità che causa crash imprevisti dell’app e devono essere in grado di individuare rapidamente la fonte dei crash scavando nei dati dei crash.

Il dashboard qui sotto mostra una settimana di dati sui crash per un’app mobile e una versione dell’OS. In questo esempio, gli eventi di sessione si verificano fino a centinaia di migliaia di volte al secondo, e i crash misurano tra i 15.000 e i 20.000 eventi al secondo. Uber combina questi indicatori per calcolare il tasso di mancato crash, che indica la salute dell’applicazione (l’obiettivo è essere il più vicino possibile al 100%).

Con Elasticsearch, un motore di ricerca generico, i picchi delle percentuali di crash causavano ritardi nell’ingestione e rallentavano la risposta dell’équipe nell’identificare problemi. Passando ad Apache Pinot, progettato specificamente per l’analisi in tempo reale su vasta scala, l’équipe ha riscontrato una diminuzione sia nel numero che nella gravità dei ritardi di ingestione.

Analisi approfondita dei dati dei crash

Oltre all’overview di alto livello dei dati dei crash, Uber fornisce anche analisi approfondite a livello di singolo crash. Aggregano le metriche dei crash attraverso varie dimensioni, come il numero di crash per sistema operativo e per versione, e la distribuzione dei crash per versione. Questo caso d’uso sfrutta diversi indici di Pinot (range, inverso e testuale) per segnalare quando si è verificato un tipo di crash, quali versioni sono interessate, il numero di occorrenze e il numero di utenti e dispositivi coinvolti.

Per l’analisi approfondita, era cruciale che Uber disponesse di capacità di ricerca testuale per leggere i messaggi di errore dei crash. L’indice testuale di Pinot si basa su Lucene e consente loro di ricercare i crash per messaggio di crash, nome di classe, stacktrace e altro ancora.

Misurazione delle sessioni su vasta scala

Uber utilizza anche Pinot per misurare le sessioni uniche per dispositivo, versione, sistema operativo e ora su vasta scala. Pinot offre elaborazione in tempo reale con un elevato throughput in grado di ingerire gli eventi analitici di Uber, pari a 300.000 al secondo. L’équipe ha una configurazione ibrida che include una tabella in tempo reale con granularità di 10 minuti e conservazione dei dati per 3 giorni, nonché una tabella offline con granularità oraria e giornaliera e conservazione dei dati per 45 giorni.

Utilizzando HyperLogLog di Apache Pinot, il team è riuscito a ridurre il numero di eventi memorizzati e a eseguire meno aggregazioni uniche tra gli eventi. Pinot ha inoltre fornito basse latenze — sotto i 100 millisecondi per la latenza p99.5.

Risparmio sui Costi dell’Infrastruttura

Secondo i calcoli di Uber, hanno risparmiato più di 2 milioni di dollari in costi annuali per l’infrastruttura migrando a Pinot. La loro configurazione di Pinot ha causato una diminuzione del 70% dei costi dell’infrastruttura rispetto a Elasticsearch. Hanno anche registrato una riduzione del 80% dei core di CPU e una diminuzione del 66% della loro impronta dati.

Con Elasticsearch, Uber utilizzava 22.000 core di CPU. Con Pinot, hanno ridotto tale numero del 80%. Ecco uno snapshot della loro configurazione di Pinot:

Miglioramento delle Prestazioni delle Query e Esperienza Utente

Con Apache Pinot, Uber è in grado di offrire un’esperienza utente migliore con caricamento delle pagine più veloce e maggiore affidabilità. La migrazione a Pinot ha ridotto i tempi di caricamento delle pagine del 64%, da 14 secondi a meno di 5 secondi. Pinot ha anche una migliore tolleranza per picchi di carico, portando a una ripresa più rapida dai ritardi. Anche se il team registra un ritardo di inserimento, Pinot è in grado di recuperare rapidamente entro pochi minuti.

Rispetto a Elasticsearch, Pinot ha mostrato anche significativi miglioramenti in termini di timeout delle query e perdita di dati. Se si verificasse un disastro in un’applicazione mobile mentre si utilizzava Elasticsearch, le query relative a quell’indice terminerebbero in timeout. Uber ha risolto questo problema con Pinot controllando le dimensioni del segmento. Il team non ha problemi di perdita di dati con Pinot, a differenza delle frequenti problematiche di dati quando Elasticsearch gestiva un aumento del throughput di inserimento.

La Prossima Iterazione della Configurazione di Pinot di Uber

Successivo, Uber prevede di passare all’indicizzazione di testo nativo per i loro dati di crash mobili. I loro dati di crash mobili contengono una grande quantità di dati strutturati, rendendo possibile per il team migrare tutti i loro casi d’uso agli indici di testo nativi. Questo passaggio garantirà risparmi sui costi di archiviazione dei dati e ridurrà il tempo speso nelle query dei dati.

Uber non è l’unica organizzazione che sta vedendo successi migrando da Elasticsearch a Pinot

Uniqode (precedentemente Beaconstac) ha registrato un miglioramento di 10 volte nelle prestazioni complessive delle query passando da Elasticsearch a Pinot. Cisco Webex ha anche migrato le loro analisi in tempo reale e osservabilità a Pinot dopo aver affrontato alte latenze. Il team di Webex ha scoperto che Apache Pinot forniva latenze 5 volte a 150 volte inferiori rispetto a Elasticsearch.

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