Für ein Unternehmen wie Uber ist Echtzeit-Daten der Lebensnerv sowohl für ihre kundenorientierten als auch internen Dienste. Kunden vertrauen auf Echtzeit-Daten, um Fahrten zu erhalten und Essen bei Bedarf zu bestellen. Interne Teams sind ebenfalls auf aktuelle Daten angewiesen, um die Infrastruktur hinter ihren kundenorientierten Anwendungen zu betreiben, wie zum Beispiel für ihr hausinternes Tool zur Überwachung von Mobile-App-Abstürzen.
Uber wechselte zu Apache Pinot, um dieses hausinterne Tool zu unterstützen und erzielte deutliche Verbesserungen im Vergleich zu ihrer vorherigen Analyse-Engine (Elasticsearch). Durch den Wechsel zu Pinot, einer echten Echtzeit-Analyse-Plattform, konnte Uber verschiedene Vorteile erzielen:
- 70% Reduzierung der Infrastrukturkosten (ein Ersparnis von über 2 Mio. $ jährlich)
- 80% Reduzierung der CPU-Kerne
- 66% Reduzierung des Datenbestands
- 64% Reduzierung der Seitenladezeiten (von 14 Sekunden auf unter 5 Sekunden)
- Reduzierung des Ingestionsverzugs auf <10 Millisekunden
- Abnahme von Abfrage-Timeouts und Beseitigung des Datenverlustproblems
Jetzt ansehen
Der Inhalt dieses Blogs basiert auf einem persönlichen Meetup, bei dem Apache Pinot-Anwenderberichte vorgestellt wurden. Wir beziehen uns auch auf einen Blog der Uber-Ingenieurabteilung, der erläutert, wie sie Pinot zur Bereitstellung von Echtzeit-Analysen für Mobile-App-Abstürze verwenden. Schauen Sie sich das Meetup hier an:
Oder lesen Sie weiter, um zu erfahren, wie Uber diese Ergebnisse mit Apache Pinot erzielen konnte.
Wie Uber Echtzeit-Analysen zu Mobile-App-Abstürzen liefert
Uber verfügt über einen automatisierten Ingestions-Pipeline, der App-Abstürze verfolgt und Untersuchungsdaten sammelt. Ein Teil dieser Daten wird in Apache Flink zur Transformation aufgenommen, die dann wieder in Kafka-Themen für den Downstream-Verbrauch eingebracht wird. Diese rohen und verarbeiteten Ereignisse in Kafka werden dann von Apache Pinot verbraucht, der dann analytische Abfragen ausführt, deren Ergebnisse internen Benutzern über Grafana und interne Visualisierungstools geliefert werden. Ihre Pipeline nimmt sowohl Echtzeit- als auch Offline-Daten (nicht dargestellt) auf, um ein vollständiges Bild der Nutzer zu schaffen, bekannt als Hybrid-Tabellen in Apache Pinot.
Echtzeit-App-Absturz-Analyse mit Apache Pinot
Uber veröffentlicht pro Woche etwa 11.000 neue Code- und Infrastrukturänderungen und setzt dabei auf ein hausinternes Tool (Healthline), um Absturzprobleme zu erkennen und zu lösen. Healthline ermöglicht es Uber, sein Mean Time To Detect (MTTD) besser zu messen und einzuhalten. Zum Beispiel könnten sie eine neue Funktion veröffentlichen, die unerwartete App-Abstürze verursacht und müssen in der Lage sein, schnell die Quelle der Abstürze durch Eintauchen in Absturzdaten zu identifizieren.
Das unten stehende Dashboard zeigt die Absturzdaten eines Wochenwerts für eine mobile App und eine Version des Betriebssystems. In diesem Beispiel treten Sitzungsereignisse bis zu mehreren hunderttausend Mal pro Sekunde auf, und Abstürze messen zwischen 15.000 und 20.000 Ereignissen pro Sekunde. Uber kombiniert diese Metriken, um den fehlerfreien Prozentsatz zu berechnen, der das Gesundheitszustand der Anwendung angibt (das Ziel ist so nah wie möglich bei 100 % zu sein).
Mit Elasticsearch, einem Allzwecksuchmaschine, würden Spitzen im Absturzraten verursachen Einnahmestau und verzögern das Team Reaktion auf Identifizierung von Problemen. Durch den Wechsel zu Apache Pinot, das speziell für Echtzeit-Analysen in großem Maßstab entwickelt wurde, hat das Team eine Abnahme sowohl in der Anzahl als auch in der Schwere von Einnahmestaus bemerkt.
Analyse von tiefgreifenden Absturzdaten
Zusätzlich zur übergeordneten Übersicht über Absturzdaten bietet Uber auch tiefgreifende Absturfsanalytik. Sie aggregieren Absturzmetriken über verschiedene Dimensionen wie die Anzahl der Abstürze pro Betriebssystem und pro Version sowie die Verteilung der Abstürze pro Version. Dieser Anwendungsfall nutzt mehrere Pinot-Indizes (Bereich, invertiert und Text), um mitzuteilen, wann ein bestimmter Absturftyp aufgetreten ist, welche Versionen betroffen sind, die Anzahl der Vorkommen und die Anzahl der betroffenen Benutzer und Geräte.
Für die tiefgreifende Analyse war es entscheidend, dass Uber Textsuche-Funktionen hatte, um Absturzfehlermeldungen zu lesen. Pinots Textindex basiert auf Lucene und gibt ihnen die Möglichkeit, Abstürze nach Absturzmeldung, Klassenname, Stapelüberwachung und mehr zu durchsuchen.
Messung von Sitzungen im großen Maßstab
Uber nutzt auch Pinot zur Messung von einzigartigen Sitzungen pro Gerät, Version, Betriebssystem und Stunde im großen Maßstab. Pinot bietet Echtzeitanalyse mit hoher Durchsatzkapazität, die in der Lage ist, Ubers 300.000 Analyseereignisse pro Sekunde aufzunehmen. Das Team verfügt über eine hybride Setup, das eine Echtzeit-Tabelle mit 10-minütiger Granularität und 3-tägigem Datenaufbewahrungszeitraum sowie eine Offline-Tabelle mit stündlicher und täglicher Granularität und 45-tägigem Datenaufbewahrungszeitraum umfasst.
Nutzung von Apache Pinot’s HyperLogLog ermöglichte es dem Team, die Anzahl der gespeicherten Ereignisse zu reduzieren und weniger eindeutige Aggregationen über Ereignisse durchzuführen. Pinot lieferte auch sehr geringe Latenzen – unter 100 Millisekunden für p99.5 Latenz.
Infrastrukturkostenersparnisse
Nach Berechnungen von Uber konnten sie mehr als 2 Millionen US-Dollar jährliche Infrastrukturkosten einsparen, indem sie zu Pinot migrierten. Ihre Pinot-Einrichtung führte zu einer 70%igen Reduzierung der Infrastrukturkosten im Vergleich zu Elasticsearch. Sie erlebten auch eine 80%ige Reduzierung der CPU-Kerne und eine 66%ige Verringerung ihres Datenvolumens.
Mit Elasticsearch nutzte Uber 22.000 CPU-Kerne. Mit Pinot reduzierten sie diese Zahl um 80%. Hier ist ein Schnappschuss ihrer Pinot-Einrichtung:
Verbesserte Abfrageleistung und Benutzererfahrung
Mit Apache Pinot kann Uber eine bessere Benutzererfahrung mit schnelleren Seitenladungen und verbesserter Zuverlässigkeit liefern. Die Migration zu Pinot reduzierte die Seitenladezeiten um 64%, von 14 Sekunden auf unter 5 Sekunden. Pinot verfügt auch über eine bessere Toleranz gegenüber Lastspitzen, was zu schnellerer Verzögerungsauflösung führt. Selbst wenn das Team eine Ingestionsverzögerung feststellt, kann Pinot schnell innerhalb weniger Minuten wiederherstellen.
Im Vergleich zu Elasticsearch zeigte Pinot auch signifikante Verbesserungen bei Abfrage-Timeouts und Datenverlust. Wenn ein Katastrophenereignis in einer mobilen Anwendung aufgetreten wäre, während Elasticsearch verwendet wurde, würden Abfragen bezüglich dieses Indexes abbrechen. Uber löste dieses Problem mit Pinot, indem sie die Segmentgröße kontrollierten. Das Team hat auch im Vergleich zu häufigen Datenproblemen bei Elasticsearch, wenn mit erhöhtem Ingestionsdurchsatz umgegangen wurde, keine Datenverlustprobleme mit Pinot.
Die nächste Iteration von Ubers Pinot-Setup
Als Nächstes plant Uber, auf native Textindizierung für ihre mobilen Absturzdaten umzusteigen. Ihre mobilen Absturzdaten enthalten eine Menge strukturierter Daten, was es dem Team ermöglicht, alle ihre Anwendungsfälle auf native Textindizes umzustellen. Dieser Übergang wird Kosteneinsparungen bei der Datenspeicherung bringen und die Zeit, die für das Abfragen von Daten aufgewendet wird, reduzieren.
Uber ist nicht die einzige Organisation, die durch den Wechsel von Elasticsearch zu Pinot Erfolg erzielt
Uniqode (ehemals Beaconstac) erzielte eine 10-fache Verbesserung der Gesamtabfrageleistung, indem es von Elasticsearch zu Pinot wechselte. Cisco Webex hat auch ihre Echtzeitanalytik und Beobachtbarkeit nach hohen Latenzzeiten zu Pinot migriert. Das Webex-Team stellte fest, dass Apache Pinot 5- bis 150-fach geringere Latenzen als Elasticsearch aufwies.
Source:
https://dzone.com/articles/real-time-app-crash-analytics-with-apache-pinot