Performance-Optimierung am Kundenbeispiel des Shops von Bibis Beautypalace

Performance-Optimierung_am_Kundenbeispiel_Bibis_Beautypalace-860x325

Dass Performance und Geschwindigkeit im Onlineshop wichtig sind, ist nichts Neues. Sobald das Laden Deines Onlineshops, die Bestellabwicklung sowie der Checkout-Prozess zu lange dauern, kann es schnell passieren, dass sich der Kunde abwendet, den Bestellvorgang unterbricht und das Produkt bei einem anderen Anbieter kauft.  Gerade online und vor allem im eCommerce ist es deshalb wichtig, dass der Endkunde nicht lange warten muss, um seinen Warenkorb zu füllen und die Bestellung abzuschließen. Damit diese Herausforderung zu keinem Problem wird, hat unser Partner Kellerkinder einige Praxistipps in Sachen Performance für Dich.

Die Basis

Die Performance steht und fällt mit dem richtigen Setup. Hier solltest Du Dir vorab folgende Fragen stellen:

1. Mit wie vielen Benutzern rechnest Du pro Minute?

2. Wie viele Bestellungen werden pro Minute/ am Tag getätigt?

3. Was machst Du, wenn irgendetwas schief läuft? 

Die ersten beiden Fragen lassen sich leicht beantworten, wenn man schon einen Shop oder eine Website hat. Ansonsten ist hier Pi mal Daumen angesagt.
Erst dann kann auch die dritte Frage beantwortet werden.

Wenn Du von unter 1.000 Besuchern pro Minute ausgehst, reicht ein einzelner Webserver. 
Falls Du Dich dann aber verschätzt hast, ist es relativ schwer, im Fall eines Falles einen Plan B parat zu haben. 
Einfacher funktioniert dies im Cluster-Setup. Ein Cluster besteht aus mehreren Servern, die sich die Last teilen. An vorderster Front steht der Load-Balancer. Seine Aufgabe besteht darin, die eingehenden Anfragen auf die App-Server, welche die eigentliche Website hosten, zu verteilen.
In diesem Setup können im laufenden Betrieb weitere App-Server dazu geschaltet werden, um eine höhere Last aufzunehmen.

Von 0 auf 100

Bevor man mit einem Neuwagen Vollgas gibt, sollte man diesen die ersten paar hundert Kilometer einfahren. Das empfehlen zumindest die meisten Hersteller.
Dasselbe gilt in gewisser Weise auch für den Onlineshop – ‚Testing‘ ist hier das Stichwort. Auch die Performance in Deinem Shop muss getestet werden, durch sogenannten Last-Tests.
Einen Last-Test kannst Du auf unterschiedliche Art und Weise durchführen. Letztendlich simulieren alle Arten mehrere Benutzer, die gleichzeitig eine Seite aufrufen. 

Dabei sind nicht nur die Peaks, also die Spitzenwerte, zu testen, welche über dem durchschnittlich erwarteten Andrang sein sollten. Auch ein Langzeittest, am besten über mehrere Stunden, ist sehr empfehlenswert.
Das musste auch unser Partner Kellerkinder lernen, als spätabends (ein paar Stunden nach dem Live-Gang von www.bilou.de) plötzlich zwei von vier App-Servern den Dienst wegen eines vollen Caches aufgegeben haben. Das Problem ließ sich glücklicherweise schnell finden und durch eine Erhöhung der Speicherkonfiguration der Caches auch schnell lösen.

Für den Last-Test nutzt Du am besten JMeter, da hier ein typischer Weg eines Kunden durch den Shop nachgestellt werden kann, den Shopware bereits vorbereitet hat.

And the solution is ...

Durch die Last-Tests wird dann schnell deutlich, dass die Datenbank meistens eine der Ursachen für eine verringerte Performance darstellt.

Bei MySQL-Datenbanken ist es sogar so (abhängig von der Version), dass der Query-Cache standardmäßig deaktiviert ist. Über ‚query_cache_type‘ und ‚query_cache_size‘ lässt sich dieser konfigurieren. Zudem bietet das Skript mysqltuner (GitHub) weitere Anhaltspunkte, welche Konfigurationen angepasst werden können.

Im Setup kannst Du auch ein Master-Slave-System aufbauen, damit auch hier nicht die ganze Last auf einen Server drückt. Dabei gibt es verschiedene Herausforderungen. 
Was passiert beispielsweise, wenn wirklich exakt gleichzeitig mehrere Bestellungen (auf verschiedenen Servern) abgeschlossen werden und diese dann dieselbe Bestellnummer erhalten? Natürlich ist die Wahrscheinlichkeit sehr gering, dieser Fall darf aber trotzdem nicht ausgeschlossen werden. 

Hier hilft das Plugin aus der Shopware Enterprise Edition ‚SwagEssentials‘ mit der NumberRange Komponente. Diese Komponente zentralisiert und optimiert die Nummerngenerierung über einen Redis-Server, um streng fortlaufende Bestellnummern sicherzustellen. Das Plugin bietet übrigens noch einige weitere nützliche Aspekte zum Thema Performance.

… a Plugin!

Wenn es aber nicht die Datenbank ist, ist es bestimmt ein Plugin. Aber welches? Meistens sind mehrere installiert und jedes Einzelne zu deaktivieren, um das Verhalten zu prüfen, ist sehr zeitaufwendig.

Ein auffälliges Plugin lässt sich zum Beispiel durch PHP-Profiling herausfinden. Durch Tools wie Blackfire oder Tideways kannst Du unter anderem sehen, welche PHP-Funktionen aufgerufen werden und wie viel Zeit diese benötigen, während eine Seite geladen wird.

performance_killer

Diese Darstellung hilft dabei, um Performance-Killer zu finden: Zu viele und unnötige SQL-Queries, Laden nicht benötigter Artikeldaten auf jeder Seite im Shop oder angehängte Aufrufe an globale Events sind nur drei Beispiele, die bei mehreren Performance-Analysen gefunden wurden.

Wer sucht, der findet

Ein essentieller Bestandteil im Shop ist die Suche. Hier möchte niemand lange warten, bis der gesuchte Begriff ein Resultat ausspuckt. Der schlimmste Fall, der eintreffen kann, ist wenn die Suche nicht das findet, was der Kunde eigentlich sucht.

Bei einem hochperformanten Shop oder bei großen Produktkatalogen ist es daher ratsam, die Suche auf einen anderen Server auszulagern. Der Vorteil liegt dabei auf der Hand: die eigentliche Datenbank wird entlastet.
Die Intelligente Suche von Shopware bietet zwar viele nützliche Optionen und Erweiterung an, die Ausführung findet aber dennoch auf derselben Datenbank statt.
Drittanbieter wie FACT-Finder und Findologic sind hier eine mögliche Alternative.
Allerdings findet Kellerkinder ElasticSearch wegen der direkten Integration in Shopware und der Flexibilität an Konfigurationen am besten. Das lässt sich auch schon problemlos ohne große Kosten nutzen.

Cache all the things!

Zum Abschluss darf der Shopware-eigene Cache nicht vergessen werden. Alles, was über den Cache abgerufen werden kann, muss nicht die gesamte Verarbeitung von Shopware durchlaufen. Shopware bietet hier im Standard schon den HTTP-Cache an.

Wer aber noch weiter gehen möchte, kann den Cache zum Beispiel in einen Redis-Server auslagern oder einen Varnish-Server vorschalten. Der Vorteil bei einem Varnish-Server liegt darin, dass der PHP-Prozess für den Aufruf gar nicht gestartet werden muss und der Webserver die Inhalte direkt ausgebenkann. Das funktioniert rasendschnell!

Am Ball bleiben

Wenn alle Maßnahmen getroffen wurden und der Shop endlich online geht, beobachte die Auslastung. Das ist nicht nur hochinteressant, sondern auch wichtig, um im Notfall schnell reagieren zu können.

Als Beispiel hat unser Partner hier Ende 2018 den neuen Onlineshop von bilou gelaunched. Die Marke bilou steht für besonders ausgefallene, lieblich duftende Körperpflege Produkte, die von YouTube-Star, Influencerin und Bloggerin Bianca „Bibi“ Claßen (BibisBeautyPalace) gegründet wurde.

Im Screenshot siehst Du die Statistik der Anfragen auf einem von vier App-Servern, also etwa ¼ des tatsächlichen Traffics, zum Zeitpunkt des Go-Live.
Nachdem die offizielle Instagram-Seite von bilou den neuen Shop per Post veröffentlicht hat, dauerte es noch einige Minuten bis der erste Traffic kam. Dann ist allerdings deutlich zu sehen, dass die Anfragen pro Minute in die Höhe schießen, als Bibi den Launch des Shops in ihrer Instagram-Story verkündete.

instagram_bilou_traffic

Last but not least

Für einen erfolgreichen Live-Gang eines hochperformanten Shops ist es wichtig, direkt zu Beginn das richtige Server-Setup als Basis zu schaffen.
Mit der passenden Konfiguration und ausreichenden Tests solltest Du am Ende auf alle Fälle vorbereitet sein.

Über Kellerkinder

100% Shopware in einer remote first Company – das sind die Kellerkinder. Nach ihrem Credo “Qualität ist der beste Businessplan” entwickeln sie komplexe und individuelle Lösungen auf Basis von Shopware. Weitere Infos zur Agentur findest Du hier.

 

Das könnte Dich auch interessieren:

Case Study bilou

Praxistipp: Performance-Optimierung für Onlineshops

Grundlagen der Conversion Optimierung für Onlineshops