Geschwindigkeit von Shopware erhöhen – von Legenden und Wirklichkeit

Es gibt viele Mythen im Netz, welche Konfiguration einem Shopware-System richtig Beine macht. Wir sind einigen nachgegangen und haben sie einem Test unterzogen.

Es hat sich in den Weiten des Internets herumgesprochen, dass die Geschwindigkeit einer Webseite ein wichtiges Kriterium für den Erfolg ist. Google straft langsame Seiten bei der Suche ab. Endkunden, die bei der Bedienung der Seite beim jedem Klick frustriert warten müssen, sind schnell wieder verschwunden.

Bei Shopsystemen ist das eine positive Nutzererfahrung besonders direkt spürbar. Kunden, die den Shop aufgrund seines schlechten Ranking nicht finden, können bei ihm auch nichts kaufen. Werbung mit Adword werden teurer und die Absprungsraten steigen.

So ist es nicht verwunderlich, dass zur Frage wie ein Shopsystem schnell zu bekommen ist viele Beiträge verfasst werden und viele Versprechungen gemacht werden.

Schneller Webserver ≠ Schnelle Anwendung

Immer wieder heißt es, dass sie die Geschwindigkeit des Shopsystems Shopware in vom eingesetzten Webserver abhängt. Die Rechnung scheint einfach:

Ein leichtgewichtiger, auf die Last von hunderttausenden Anfragen optimierter Webserver, muss doch eine notwendige, wenn nicht sogar hinreichende Voraussetzung für eine schnelle Anwendung sein.

Wie Shopware funktioniert

Bevor wir jetzt einige Messreihen präsentieren, die die These bestätigen oder widerlegen, schauen wir uns mal kurz an, wie Shopware überhaupt funktioniert:

Shopware ist eine monolithische, in der Scripsprache PHP geschriebene Webanwendung.

Monolithisch heißt, dass der ganze Quellcode an der Stelle vorliegt, an dem eine Instanz ausgeführt wird.

Was bedeutet das?

Prinzipiell verarbeitet PHP jede eingehende Anfrage komplett unabhängig von der vorhergehenden: Eine Anfrage kommt rein, der Interpreter lädt den PHP-Code, interpretiert ihn und führt ihn aus.

Zur Laufzeit wird in der Regel der Zustand der Anwendung über ein ORM aus einer Datenbank geholt. Nicht selten wird gerade bei Webshops die eine oder entfernten Schnittstelle per RPC (Remote Procedure Call) zum Beispiel per Soap oder JSON-Api aufgerufen. Das Ergebnis der Abfrage wird im Speicher verarbeitet, dann mit einem Template verknüpft (bei Shopware „Smarty“) und über den Webserver wieder ausgegeben.

Damit das Ganze halbwegs performant funktioniert, haben moderne Anwendungen und Infrastukturkomponenten eine ganze Reihe von Caches integriert. Ein paar Beispiele (keine vollständige Liste):

  1. das Beitreibsystem und die Hardware holen Festplattenzugriffe aus Caches
  2. die Datenbank verwendet Caches um die persistierten Daten schneller auszuliefern
  3. der PHP-Interpreter speichert den interpretierten Programmcode im OP-Code-Cache
  4. Objekte werden statt in einer vermeintlich langsamen Relationalen Datenbank in einem im speicher liegenden Key-Value-Store abgelegt (APC-U, Redis, Memcached, …)
  5. die fertig generierte Antwort wird als html-Datei auf der Festplatte oder im RAM eine Caching-Proxies wie Varnish abgelegt.

Das gelingt gerade Shopware erstaunlich gut. Auf einem lokalen Arbeitsplatz-PC wird eine Anfrage auf eine Liste von Lebensmittelprodukten mit bewusst ausgeschaltetem Http-Cache nach einer Zeit von etwas über 100ms ausgeliefert. Mit wenigen Millisekunden Verzögerung trudeln – dank kurzem Weg zum lokalen System – auch die statischen Inhalte wie Bilder, Javascript und CSS ein.

Welchen Einfluss hat der Webserver?

Auch ohne Benchmark lässt sich vermuten, dass es nicht der Webserver ist, der die Geschwindigkeit der Antwort beeinflusst.

Die Beispiele mit dem Apache- (links) und nginx-Webserver (rechts) zeigen, dass die Anfrage vom Apache Webserver in diesem Fall 2ms langsamer beantwortet wird. Solche geringen Unterschiede liegen aber durchaus im Rahmen der normalen Schwankungen.

Verhalten unter Last

Ein nginx ist ein leichtgewichtiger Webserver. Bei kleinen Services mit hunderttausenden Anfragen pro Sekunden kann das ein entscheidender Vorteil sein. Aber bleibt der, wenn unter der Haube ein PHP-Script 100.000 + X Zeilen Programmcode verarbeitet und zwischendurch noch auf die Datenbank, den Objectcache oder eine SOAP-Anfrage wartet?

Der Unterschied sieht bei unseren Messungen nicht gerade groß aus. Tatsächlich war in der Messung die Anfrage an den nginx im Durchschnitt 0,2 ms schneller als an den Apache.

247.514 ms durchschnittliche Anfragezeit
247.357 ms durchschnittliche Anfragezeit

Fazit

Shopware Webshops sind schnell. Und zwar unabhängig davon, welcher Webserver und welches relationale Datenbanksystem zum Einsatz kommt.

Ist Ihr Shopsystem trotzdem langsam? Kaufen Sie kein Schlangenöl.

  • Schauen sie sich ihre Anwendung an; die installierten Plugins und das verwendete das Theme.
  • Setzen Sie einen Profiler wie New Relic, xdebug oder xhprof ein
  • Lassen sie die Datenbank auf dem gleichen Server wie das PHP laufen
  • Setzen Sie SSDs Festplatten ein
  • Nehmen Sie eine aktuelle PHP-Version
  • Fragen Sie uns – wir freuen uns auf Ihre Anfrage!
16. April 2019
|||

Related Posts