Suchen

Moderne Architekturen zur Datenanalyse – Teil 1 Analyse von Echtzeitdaten

| Autor / Redakteur: Steffen Hausmann / Nico Litzel

In dieser dreiteiligen Artikelserie betrachten wir anhand einer konkreten Beispielanwendung den Aufbau einer Architektur zur Analyse von Echtzeitdaten mit AWS. Wir diskutieren, wie durch das Zusammenspiel verschiedener Dienste Aspekte der Echtzeitanalyse und der langfristigen Analyse von Daten flexibel kombiniert werden können.

Firmen zum Thema

Der Autor: Steffen Hausmann ist Specialist Solutions Architect Analytics bei AWS
Der Autor: Steffen Hausmann ist Specialist Solutions Architect Analytics bei AWS
(Bild: AWS)

Die Rahmenbedingungen der Beispielanwendung, die wir betrachten, sind relativ einfach: Wir betreiben ein Taxiunternehmen in New York City und haben unsere Flotte mit moderner Technik ausgestattet. So werden für jede Fahrt die Geo-Koordinaten von Start- und Endpunkt, die benötigte Zeit, die Anzahl der Fahrgäste und der bezahlte Preis an das Backend übermittelt.

Diese Daten möchten wir auf zwei verschiedene Arten nutzen: Zum einem sollen die Daten, insbesondere der Umsatz, kontinuierlich auf Unregelmäßigkeiten analysiert werden, um schnell darauf reagieren zu können. Zum anderen möchten wir aber auch langfristige Analysen von historischen Daten durchführen, um bessere Vorhersagen über die Passagierzahlen und die Umsatzentwicklung machen zu können.

Architektur zur schnellen und langfristigen Analyse von Echtzeitdaten

Um diesen Anforderungen gerecht zu werden, bietet sich eine Zweiteilung der Architektur an. Einen Teil, der die Echtzeitanalyse der Daten abdeckt und einen zweiten Teil, der die Daten archiviert, um eine Analyse aller bisher angefallenen historischen Daten mittels SQL zu ermöglichen. In einem ersten Schritt werden die Daten temporär in einem Datenstrom zwischengespeichert. Für die Echtzeitanalyse werden die Daten aus dem Zwischenspeicher analysiert und die Ergebnisse dieser Analyse werden in einem Dashboard grafisch dargestellt. Zugleich werden die Rohdaten aus dem Zwischenspeicher aber auch archiviert, um sie für langfristige Trendanalysen verwenden zu können.

Zweiteilung der Architektur
Zweiteilung der Architektur
(Bild: AWS)

Durch die zweigeteilte Architektur sind die Abläufe der Datenproduktion und Datennutzung voneinander getrennt. Datenproduzierende und konsumierende Systeme können unabhängig voneinander betrieben, verändert und skaliert werden. Außerdem können die Daten auch gleichzeitig und unabhängig für Analysen von verschiedenen Systemen genutzt werden. Somit gibt die Architektur viel Spielraum, um zukünftige Anforderungen und Anwendungsfälle elegant in die bestehende Architektur zu integrieren, ohne dass die bestehenden Konsumenten oder Produzenten angepasst werden müssen.

Im Folgenden werden wir anhand des Beispielszenarios diskutieren, wie sich die Architektur mithilfe von AWS-Diensten umsetzen lässt. Dabei liegt ein besonderes Augenmerk auf der Verwendung von vollständig verwalteten Diensten, sodass wir uns auf die Analyse der Daten und das Lösen der Geschäftsprobleme konzentrieren können, ohne uns auf die Beschaffung, den Betrieb und die Skalierung der Infrastruktur kümmern zu müssen.

Um das Beispielszenario in Ihrem eigenen AWS Account nachzustellen, führen Sie dieses CloudFormation template aus. AWS CloudFormation erstellt dann automatisch die benötigten Ressourcen in Ihrem Account. Da für die Verwendung dieser Ressourcen Kosten anfallen, denken Sie bitte daran nach dem Test das CloudFormation Template wieder zu löschen, um die erstellten Ressourcen wieder zu entfernen.

Nachdem Sie dem Link zum Ausführen des CloudFormation Templates gefolgt sind, übernehmen Sie in dem folgenden Assistenten die voreingestellte Konfiguration durch dreimaliges Drücken auf Next. Auf der letzten Seite wählen Sie durch das Setzen jeweils eines Häkchens beide Optionen unter Capabilities aus, um zu bestätigen, dass CloudFormation IAM-Ressourcen erstellen und geschachtelte CloudFormation Templates ausführen darf. Beenden Sie den Dialog mit Create. Nach fünf bis zehn Minuten finden Sie alle benötigten Ressourcen automatisch in Ihrem AWS Account.

Zwischenspeichern der Daten in einem Datenstrom

Zunächst müssen die Echtzeitdaten aufgenommen und zwischengespeichert werden. Für diese Grundlage eignet sich Amazon Kinesis Data Streams. Damit können Sie kontinuierlich Gigabytes von Daten pro Sekunde aus Hunderttausenden von Quellen wie Website-Clickstreams, Datenbank-Event-Streams, Finanztransaktionen, Social Media Feeds, IT-Logs und Location-Tracking-Events erfassen. Die gesammelten Daten stehen in Sekunden zur Verfügung, um Echtzeit-Analyseanwendungen wie Echtzeit-Dashboards, Echtzeit-Anomalie-Erkennung, dynamische Preisgestaltung und mehr auszuführen.

Im Rahmen der Beispielanwendung werden die Taxifahrten simuliert, indem ein historischer Datensatz von Taxifahrten in New York City in den Datenstrom abgespielt wird. Dazu werden die Daten von einer Amazon-EC2-Instanz gelesen und in den Datenstrom geschrieben. Dabei werden in einer Minute die historischen Daten eines ganzen Tages abgespielt, was zu einer Datenrate von etwa 8.000 Ereignissen pro Sekunde führt. In der Praxis macht es dabei keinen Unterschied, ob, wie in diesem Fall, eine einzelne Java-Anwendung 8.000 Events pro Sekunde generiert oder ob 8.000 Taxis jeweils ein Event pro Sekunde erzeugen.

Echtzeitanalyse der Daten mittels SQL

Die eigentliche Datenanalyse erfolgt über SQL-Anfragen mit Amazon Kinesis Data Analytics. Streaming-Daten können damit in Echtzeit mit Standard-SQL analysiert werden, ohne mit anderen Programmiersprachen oder Verarbeitungs-Frameworks vertraut zu sein. Kinesis Data Analytics führt dabei die Schritte, die zur kontinuierlichen Analyse der Daten notwendig sind, automatisch aus und passt sich dynamisch an den Umfang und den Durchsatz der eingehenden Daten an.

Wie häufig bei Sensordaten, sind die Rohdaten der Taxis nicht störungsfrei und müssen zunächst bereinigt werden. Manche der von den Taxis generierten Ereignisse enthalten beispielsweise die unsinnigen Längen- und Breitengrade von 0, was einer Position westlich von Afrika im Meer entspricht. Um Ereignisse mit diesen offensichtlich fehlerhaften Daten aus dem Datenstrom zu entfernen verwenden wir folgende Anfrage.

Der WHERE Teil der Anfrage stellt sicher, dass nur Ereignisse in den (internen) Datenstrom cleaned_trips geschrieben werden, die von 0 unterschiedlich sind.
Der WHERE Teil der Anfrage stellt sicher, dass nur Ereignisse in den (internen) Datenstrom cleaned_trips geschrieben werden, die von 0 unterschiedlich sind.
(Bild: AWS)

Eine Besonderheit der Echtzeitverarbeitung von Daten ist, dass sie kontinuierlich stattfinden soll. Im Gegensatz zu SQL-Anfragen in relationalen Datenbanken reicht es nicht aus, eine Anfrage einmalig auszuwerten, da kontinuierlich neue Daten in dem Datenstrom abgelegt werden. Um Anfragen kontinuierlich auszuwerten wird hier das Konstrukt CREATE OR REPLACE PUMP verwendet, um die Ergebnisse der Anfrage kontinuierlich in den internen Datenstrom „cleaned_trips“ zu schreiben.

Nachdem durch die Vorverarbeitung der Daten eine ausreichende Datenqualität sichergestellt ist, werden in einem nächsten Schritt Daten miteinander verglichen, um Ausreißer zu identifizieren. Darum geht es im nächsten Teil, in der kommenden Ausgabe.

(ID:46361322)