10 September 2015 User Stories

PAYMILL: Elasticsearch ist unser Schweizer Taschenmesser für Daten

Von Michael Rupp

logo-paymill.png "In den vergangenen Monaten hat sich der Elastic-Technologie-Stack tatsächlich zu einer Stammkomponente unserer Service-Architektur entwickelt und hilft uns nun auf vielfältige Weise bei der Bewältigung großer unveränderlicher Datensätze." - Michael Rupp Entwicklungsleiter, Paymill

Bei PAYMILL bieten wir einen benutzerfreundlichen und zuverlässigen Zahlungsdienst für Online-Händler – keine einfache Aufgabe. Durch unsere Hände geht das Geld Ihrer Kunden, deshalb muss alles erstklassig, stabil und schnell funktionieren.

Wir begannen mit einer schnell wachsenden monolithischen Codebase und einer SQL-Datenbank, wuchsen in den vergangenen drei Jahren jedoch sehr rasant hinsichtlich der Datengröße und der Code-Komplexität. Bei letzterer entschieden wir uns für einen mehr dienstorientierten Ansatz. Wir mussten uns daher genau überlegen, welches Tool uns helfen könnte, große Datenmengen für verschiedene Anwendungsfälle zu bewältigen und gleichzeitig in unser Architekturkonzept passen würde.

Elasticsearch fiel uns schnell auf, weil es sehr einfach einzurichten ist, eine JSON-basierte RESTful API und alle möglichen Bibliotheken bietet. So können wir zahlreiche Dienste auf einmal nutzen.

Elasticsearch - Unsere Anwendung

Um uns mit der Technologie vertraut zu machen, haben wir sie zuerst als eine Art Puffer für den Export zwischen unserer transaktionsbezogenen MySQL-Datenbank und Salesforce eingesetzt. Um lange Laufzeiten oder die Blockierung von MySQL-Anfragen zu verhindern, haben wir im Minutentakt kleine unveränderliche Datenpakete in Elasticsearch verschoben und diese Daten dann in einem anderen Prozess an Salesforce weitergeleitet, was einige Zeit in Anspruch nehmen kann.

Diese Aufgabe war der perfekte Ausgangspunkt: So erhielten wir Einblicke in die grundlegenden Konzepte von Elasticsearch, lernten den Umgang mit Elastica, der zugehörigen PHP-Bibliothek, und machten unsere ersten Erfahrungen während einem nicht unbedingt kritischen Prozess.

Da wir mit den Ergebnissen zufrieden waren, beschlossen wir, mit Elasticsearch den nächsten Schritt zu wagen und es für unser Anwendungs-Logging zu nutzen. Als Zahlungsdienstleister müssen wir hinsichtlich Logging und Rückverfolgbarkeit sehr strenge Regeln einhalten und unbedingt darauf achten, dass keine Informationen verloren gehen. Im Prinzip müssen wir jede Anmeldung, jede Aktion und jeden API-Aufruf innerhalb unseres Systems speichern und diese Informationen jahrelang aufbewahren, um alle Compliance-Regeln zu erfüllen.

Um das zu erreichen, haben wir einen skalierbaren und ausfallsicheren Service entwickelt, der alle Logging-Daten auf Anwendungsebene in Elasticsearch speichert und unserer Verwaltung und dem Support über ein Frontend bereitstellt. Dies ist immer noch ein laufendes Projekt, da wir in Zukunft auch Logstash und Kibana integrieren möchten. Jedoch haben wir bis jetzt schon viel über Index- und Typenmanagement und das Speichern und Abrufen von Daten gelernt.

Screen Shot 2015-09-10 at 12.27.55.png

Unser eigenes Such-Frontend für alle Logging-Daten

Das hat wiederum sehr gut funktioniert, sodass wir schnell noch einen Anwendungsfall für Elasticsearch ausgemacht haben. Wir bieten unseren Kunden ein Frontend an, das sogenannte „Merchant Centre“, über das sie Zugang zu ihrem Konto und ihren Daten haben. Eine Schlüsselfunktion dieser Plattform ist ein Dashboard, auf dem die wichtigsten Geschäftszahlen auf einen Blick zu sehen sind – inklusive einiger analytischer Diagramme.

Elasticsearch im Merchant Centre

Da SQL-basierte Analytik sehr langsam werden und Tabellen schlicht blockieren kann, schienen uns Elasticsearch und dessen umfangreiche Aggregationsfunktionen die perfekte Lösung für unser Problem zu sein.

Wir haben es als Datenspeicherkomponente in einen ETL-Prozess integriert und den Datenabruf in unserem Merchant Centre eingerichtet, um unsere eigenen Zugangskontrollmechanismen zu nutzen. Alle wissen, wie wichtig Ladezeiten bei Websites für Kunden sind, und wir waren uns nicht ganz sicher, ob die Echtzeit-Aggregation schnell und stabil genug für unsere Bedürfnisse sein würde. Aber Elasticsearch hat uns hier nicht enttäuscht: Es liefert die Werte sogar bei komplexeren Aggregationen sehr schnell.

Screen Shot 2015-09-10 at 12.29.46.png

Im obigen Bild sehen Sie das neue Dashboard. Es ist noch nicht online, der Release steht aber demnächst an. Bleiben Sie dran!

In den vergangenen Monaten hat sich der Elastic-Technologie-Stack tatsächlich zu einer Stammkomponente unserer Service-Architektur entwickelt und hilft uns nun auf vielfältige Weise bei der Bewältigung großer unveränderlicher Datensätze. Wir nutzen es zum Logging, Suchen und Analysieren von Daten – intern und für die Kunden. Unsere Systemadministratoren haben den gesamten ELK-Stack zur Verarbeitung der Server-Logs eingerichtet und wir planen, ihn auch für die Suche im Merchant Centre einzusetzen. Außerdem denkt das Data Science-Team darüber nach, Elasticsearch als Datenquelle für seine Modelle zu nutzen.

Mit einigen hundert GB an Daten ist unser Cluster immer noch sehr klein im Vergleich zu dem, was andere mit Elasticsearch bewerkstelligen. Aber er wächst schnell und wir sind sehr zuversichtlich, dass wir noch eine ganze Weile auf wesentlich größere Mengen skalieren können, ohne viel umzuschreiben oder die Technologie wechseln zu müssen.

Gewonnene Erkenntnisse

Ich möchte auch einige unserer bisher gewonnen Erkenntnisse mit Ihnen teilen, um Ihnen beim Einstieg in diese Technologie zu helfen:

  • Bemühen Sie sich um die klare Definition von Typen und Mappings. Auch wenn Sie Daten unstrukturiert speichern können – Strukturänderungen sind ziemlich teuer und sollten möglichst vermieden werden.
  • Nutzen Sie einen Satz Indizes pro Anwendungsfall. Versuchen Sie z. B. nicht, dieselben Daten, die Sie für eine Suchfunktion gespeichert haben, auch zur Analytik einzusetzen.
  • Lernen und verinnerlichen Sie so viel wie möglich über die Elasticsearch-APIs. Es wurden viele coole Funktionen wie ngrams, suggesters or die cat APIs hinzugefügt, die Ihnen die Arbeit sehr erleichtern.
  • Nutzen Sie Kibana. Die neue Version ist ein leistungsstarkes Tool und gibt Ihnen vollen Zugang zu Ihren Daten, einschließlich Diagrammen und Widgets. Sie hilft Ihnen außerdem, Queries aufzustellen und sich an die JSON-Syntax der API zu gewöhnen.

michael_rupp.png

Als Entwicklungsleiter bei  PAYMILL ist Michael Rupp zuständig für Architektur und Management des Entwicklerteams. In seinem Studium befasste er sich mit Mathematik, Wirtschaftswissenschaften und Informatik und arbeitet nun seit über zehn Jahren in Startup-Unternehmen.

Möchten Sie mehr Erfahrungsberichte hören? Dann besuchen Sie uns bei der Elastic{ON} Tour in Munich am 10. November.