Beiträge und News
Elasticsearch, ein anderer Ansatz ...
12.09.2017

 

Elasticsearch ist eine Suchmaschine auf Basis von Lucene. Das in Java geschriebene Programm speichert die Suchergebnisse in einem NoSQL-Format (JSON) und gibt sie über ein RESTful-Webinterface aus.

Elasticsearch ist neben Solr der am weitesten verbreitete Suchserver. Er ermöglicht auf einfache Weise den Betrieb im Rechnerverbund zur Umsetzung von Hochverfügbarkeit und Lastverteilung.

Dies nun mal als Vorwort... Aber wie kann Elasticsearch bereits bestehende Web-Anwendungen optimieren um so gezielt einen Performance-Boost zu erzeugen ?

Datenbank gestützte dynamische Webseiten wie Shop-Systeme, Content Management Systeme oder Web-Anwendungen in Form von Frontend- bzw. Backend-Systeme können durch die gezielte Implementierung von Elasticsearch optimiert werden. Hierbei ist zu ermitteln, welche Daten in welcher Form benutzt werden. Die Problematik von gleichzeitigem bzw. parallelem "Insert", "Update" und Delete" des Datenbestandes kann gezielt durch den Aufbau eines optimierten Suchindex mit Elasticsearch nahezu gelöst werden.

Stellen wir uns ein Shopsystem vor. Hier werden Artikeldaten im Backend-Bereich angelegt, überarbeitet und auch gelöscht. Parallel hierzu greifen aber Shop-Besucher lesend auf die Artikeldaten zu. Je mehr Besucher gleichzeitig den Online-Shop durchstöbern, desto anfälliger wird das System in Bezug auf Geschwindigkeit und Performance, gerade wenn hierbei auch noch im Backend Bereich gearbeitet wird.

Der Ansatz, um hier Abhilfe zu schaffen, ist recht einfach ... die Trennung von Lese- und Schreiboperationen. Baut man nun z.B. einen optimierten Suchindex der Artikeldaten auf und lässt die Shop-Besucher hierüber die Artikel durchstöbern und finden, kommen sich Schreib-Operationen in der Datenbank hier nicht ins Gehege und wirken sich negativ auf die Performance aus.

Mit dem heute umgesetzten Projekt für den TT-LAN Offenburg e.V. (https://www.tt-lan.de) möchten wir das Prinzip an Hand eines Live-Beispieles veranschaulichen.

Der Webseite liegt eine aufwendige Benutzerverwaltung zu Grunde, die wiederum als Basis für die Zahlung von Eintrittsgeldern, Sitzplatzreservierungen, Turnieranmeldungen und auch Turnierdurchführungen sowie einem eigenen Messaging-System dient. Der Verein veranstaltet einmal im Jahr eine LAN-Party mit um die 300 Teilnehmern und organisiert die komplette Veranstaltung von Freitag bis Sonntag über das Content Management System. Während der LAN greifen im Schnitt 200 Teilnehmer parallel durchgehend auf die Webanwendung zu, teils lesend, teils schreibend und teils löschend. Über das Forum und das Messaging-System wird sich ausgetauscht, alle Turniere inkl. den Turnierbäumen etc.werden hiermit verwaltet, Infos zum nächsten Gegner pro Turnier wird sich geholt, der Sitzplan durchsucht, etc. etc. etc. ... ebenso wird das komplette Catering, also das Kassensystem inkl. Bring-Service hierüber abgedeckt. Seit letztem Jahr werden nun aber keine lokalen Server auf der LAN eingesetzt, sondern die Systeme im Internet. Somit können parallel zu den LAN-Teilnehmern auch externe Besucher nach wie vor die Webseite besuchen um sich somit auf den aktuellen Stand der Veranstaltung zu bringen. Letzten Endes werden auch die LAN-Teilnehmer diese Funktion an ihren Smartphones bzw. Tablets nutzen an der LAN. Somit steigt die Anzahl der aktiven Verbindungen natürlich erheblich.

Aus diesen Gründen haben wir nun Elasticsearch mit eingebaut. Die neu entwickelte Schnittstelle erkennt Änderungen im Datenbestand der Datenbank und führt entsprechend Updates im Index aus. Somit ist sichergestellt, das der Index immer den aktuellen Datenbestand beinhaltet. An verschiedenen Bereichen des CMS wurden nun lesende Operationen entsprechend umgeschrieben, so daß diese die Daten aus dem Suchindex holen. Der Suchindex wiederum wurde exakt auf die Bedürfnisse der Lese-Operationen ausgerichtet und optimiert. Selbstverständlich kann die Nutzung von Elasticsearch auch per Klick deaktiviert werden, so daß auch die lesenden Daten wieder aus der Datenbank kommen.

Durch diese Optimierungen konnten wir das System z.B. in den Bereichen "Sitzplan" und "Messaging" um Faktor 25 ca. beschleunigen.

Bereich Anzahl DB-Abfragen ohne Elasticsearch & Ausführungszeit Anzahl DB-Abfragen mit Elasticsearch & Ausführungszeit
Sitzplan 291 ... ( 0,009111ms) 5 ... ( 0,000371ms)
Messaging 1468 ... ( 0,058791ms) 27 ... ( 0,002341ms)

 

Die Ergebnisse sind vom Testsystem bei alleiniger Nutzung. Somit wird der Benefit dieser heutigen Anpassung erst richtig auf dem Live-System zum Tragen kommen... hier ganz besonders während der nächsten Veranstaltung, wenn auch entsprechend Last auf die Systeme kommt.

Sollten wir sie neugierig gemacht haben, würden wir uns freuen, wenn sie sich mit uns in Verbindung setzen, um ihre individuellen Möglichkeiten genauer zu besprechen.

zum Kontaktformular