High Performance Shopware 5.1 mit Elasticsearch

Das kommende Shopware 5.1 Release enthält eine Unterstützung für die Suchdatenbank Elasticsearch, um die Produktsuche und Kategorieseiten zu beschleunigen. Elasticsearch ersetzt dabei MySQL nicht vollständig sondern arbeitet wie ein Cache für die Produktsuche.

Anlässlich des Release Candidate 1, der heute am Shopware Community Day veröffentlicht wurde, haben wir nachgemessen was für Auswirkungen die neue Elasticsearch Suche auf die Shopware Performance hat.

Die Umsetzung einer alternativen Suche direkt im Core von Shopware ist ein großartiges Ergebnis für das Shopware Entwickler Team, die eine lange Vorlaufzeit hatte. Bei den ersten Planungen haben wir von Qafoo schon vor 1.5 Jahren mit Shopware mögliche Implementierungen diskutiert. Für dieses Feature ist eine aufwändige Restrukturierung der Codebasis notwendig gewesen, so dass Elasticsearch ein Drop-In Replacement für die existierende Suche ist.

Für einen ersten Überblick wie die Elasticsearch Suche funktioniert haben wir zwei Architekturdiagramme die erklären welche zusätzlichen Systeme zu einem Shopware Shop hinzukommen: Es wird Elasticsearch und ein zusätzlicher Cronjob benötigt, um eine regelmäßige Synchronization zu erreichen.

Für die Tests haben wir Shopware von Github installiert und nutzen die 5.1 branch auf einer frischen Digitalocean Maschine mit 2 CPU/4 GB. Für das Setup von Elasticsearch mit Shopware haben wir die Dokumentation verwendet.

Als erstes haben wir die Performance mit dem üblichen Shopware Demodatensatz mit 225 Produkten getestet. Bei geringen Produktmengen lässt sich kein Unterschied messen, es ist sogar so, dass die MySQL Suche mit 7 ms etwas schneller ist als Elasticsearch mit 19ms. Bei Antwortzeiten um 400ms ist das jedoch zu vernachlässigen.

Dieser Vergleich zeigt, dass Änderungen in der Architektur nicht immer bessere Ergebnisse erzielen. Die Verwendung von Elasticsearch mit Shopware verursacht zusätzliche Hardware-, Wartungs- und das Monitoringkosten, die sich bei geringen Produktmengen nicht rechnen.

Spannend wird es, wenn wir die Zahl der Produkte erhöhen: Wir nutzen einen Zufallsgenerator um 100.000 Produkte in 100 Kategorien zu erzeugen. Im Vergleich haben wir jetzt einen klaren Gewinner: Elasticsearch antwortet mit 29ms, kaum langsamer als mit 200 Produkten, während die selbe Seite mit MySQL 3.9 Sekunden für die Anzeige benötigt.

Die Elasticsearch Suche ersetzt genau die SQL Queries in Shopware, welche unter großen Mengen von Produkten deutlich langsamer werden. Dafür wird nur ein einziger HTTP Query an die Elasticsearch Datenbank benötigt, der unabhängig von der Produktzahl konstant im Bereich 20-40ms antwortet. Die MySQL Suche dagegen wird langsamer um so mehr Produkte Ihr Shop enthält.

Unser Ergebnis: Bei großen Produktmengen ist es sinnvoll sich die neue Elasticsearch Integration anzusehen. Die schnellen Antwortzeiten auch bei sehr großen Produktmengen sind einfach deutlich besser als die native SQL Suche. Da ist es auch von Vorteil, dass die Suche direkt in Shopware integriert ist.

Performance Probleme mit Shopware? Tideways überwacht die Antwortzeiten Ihres Shops und gibt detaillierte Analysetools und Optimierungsvorschläge für Entwickler und Admins. Jetzt 30 Tage testen und mit Coupon: scd15 weitere 30% in den ersten 3 Monaten sparen.

Benjamin Benjamin 04.09.2015