Redis Teil 3 - Sessions Benchmark - NVMe SSDs, Redis und MySQL
Welche Form der Session-Speicherung führt zu mehr Performance bei Onlineshops: Dateisystem, Arbeitsspeicher oder Datenbank? In unserem Sessions Benchmark haben die wir die Schreib-, Lese- und Änderungs-Operationen pro Sekunde von Redis, NVMe SSDs und MySQL gemessen und ausgewertet.
Testumgebung
Die Tests wurden auf einem unserer Cluster durchgeführt mit unserer aktuellen Hardware (zum Zeitpunkt des Tests), wie etwa Intel Xeon Gold 6254. Bei der Testumgebung haben wir 4 CPU Kerne gewählt, um die Rechenkraft eines unserer durchschnittlichen Cluster darzustellen. Die RAM-Höhe haben wir auf den sehr hohen Wert von 32 GB gestellt, damit alle Cache-Dateien in den Linux-Dateisystem-Cache abgelegt werden konnten. In den meisten Fällen ist dies mit wesentlich weniger RAM möglich.
Komponente | Hardware |
---|---|
CPU | Intel Xeon Gold 6254 @ 3.10GHz (4 aktivierte CPU Kerne) |
SSD | Samsung SSD PM1725b 3.2TB, PCIe 3.0 x8 NVMe SSD |
RAM | 32 GB DDR4 2933 MHz |
Benchmark: Sessions
Neben den Anwendungscaches wollten wir zusätzlich wissen, wie sich die verschiedenen Speichermöglichkeiten, sprich NVMe SSDs (Dateisystem), Redis (Arbeitsspeicher) und MySQL (Datenbank), auf die Performance des Sessions-Speichers auswirken.
Anders als bei den Anwendungscaches konnten wir uns nicht auf ein etabliertes Benchmark-Tool stützen, da bislang noch kein Tool existiert, welches das Verhalten von Magento- und Shopware Sessions mit allen jeweils üblichen Backends möglichst passend nachstellt. Aus diesem Grund erstellten wir unser eigenes Skript, welches wir auf GitHub veröffentlicht haben.
Da Sessions einfach nur Daten sind, welche für jeden Nutzer von Onlineshops einzeln gespeichert werden, haben wir zum Testen zufällige Strings mit der Länge von 1.500 Zeichen verwendet. Diese haben wir im Dateisystem, in Redis und in MySQL gespeichert und dabei gemessen, wie viele Operationen im Schreiben, Lesen und Ändern pro Sekunde durchgesetzt werden. Da die Lösch-Operationen für Sessions gewöhnlich nicht relevant sind, wurden sie nicht gemessen. Denn Lösch-Operationen erfolgen nicht während Nutzer ihre Requests senden, sondern erfolgen (optimalerweise) im Hintergrund.
Um das Verhalten von E-Commerce Projekten nachzustellen, haben wir die Messungen nicht nur hintereinander durchgeführt (als Single Thread), sondern auch in 8 parallelen Threads (Multi-Thread), welche permanent Daten in das Backend gelesen, geschrieben und geändert haben. So konnten wir das Verhalten von einzelnen und mehreren gleichzeitigen Onlineshop Nutzern nachstellen.
Dateisystem
Eine einfache Möglichkeit Sessions zu speichern, besteht darin, für jede Session eine einzelne Datei innerhalb eines bestimmten Ordners anzulegen. Standardmäßig ist diese Art der Sessions-Speicherung bei PHP und Magento konfiguriert.
Redis
Wie bei den Anwendungscaches, haben wir die Sessions in Redis abgelegt. Hierbei haben wir allen Sessions ein Ablaufdatum erteilt. Dadurch werden alte Sessions nach einer Zeit automatisch bereinigt
MySQL
Außerdem haben wir Sessions in der MySQL-Datenbank mit denselben Einstellungen, welche auch unsere Cluster beim Auslieferungszustand erhalten, für einen performanten MySQL Betrieb abgelegt und getestet. Das Ablegen der Sessions in MySQL wird von Shopware (per default) durchgeführt, wenn keine anderweitigen Einstellungen vorgenommen werden.
Ergebnisse
Eine Schreib-Operation erzeugt hierbei einen bisher noch nicht vorhandenen Wert und legt ihn im Backend ab. Dies entspricht dem Anlegen einer neuen Session.
Eine Lese-Operation liest einen solchen Wert aus. Dies entspricht dem Lesen einer Session.
Eine Ändern-Operation, ersetzt einen vorhandenen Wert, durch einen anderen Wert. Dies entspricht, dem aktualisierten einer Session durch eine Kundeninteraktion.
Unser Sessions Benchmark zeigt für den Single Thread, dass der Durchsatz an Schreib- und Änderungs-Operationen zwischen den NVMe SSDs und Redis sehr ähnlich ist. Im Fall der Lese-Operationen zeigen die NVMe SSDS allerdings einen wesentlich höheren Durchsatz als Redis. Für einen Onlineshop bedeutet das, dass NVMe SSDs bei einem einzelnen Nutzer des Shops eine bessere Performance erzielen als Redis. Schlussfolgernd lässt sich feststellen, dass Onlineshops mit wenig Conversion bereits von NVMe SSDs allein profitieren, ein großer Vorteil durch Redis ergibt sich hier nicht.
ABER: Sobald mehrere Anfragen gleichzeitig verarbeitet werden, zeigt sich die Stärke von Redis. Im Multi Thread steigt die Verarbeitungsgeschwindigkeit bei allen drei Operationen. Im Vergleich der Balken des Diagramms zeigt sich, dass Redis bei den Lese-Operationen einen um 33 % höheren Durchsatz erreicht als die NVMe SSDs und fast dreimal höheren wie MySQL. Im Schreiben verarbeitet Redis sogar um 41 % mehr Operationen als die NVMe SSDs und 60 % mehr als MySQL. Bei den ändernden Operationen zeigte sich im Test die höchste Differenz, da Redis einen um 61 % höheren Durchsatz als die NVMe SSDs erreichte und um 87 % höher als MySQL.
MySQL verfügt im Vergleich zu den beiden anderen Sessions-Speichern in allen Operationen über den geringsten Durchsatz, sowohl im Bereich Single Thread als auch im Bereich Multi Thread.
Fazit: Welcher Sessions-Speicher sorgt für mehr Performance bei Onlineshops?
Sobald auf einem Onlineshop mehrere Besucher gleichzeitig ihre Warenkörbe füllen und somit von mehreren Besuchern Sessions gespeichert werden müssen, lohnt sich die Nutzung von Redis. Unser Benchmark zeigt, dass Redis in allen drei Operationen schneller ist als die Dateisystem-basierte Speicherung (NVMe SSDs) oder die Speicherung in der Datenbank MySQL. Daher empfehlen wir die Implementation von Redis.
Shopware legt die Sessions standardmäßig in MySQL ab. Da diese Methode wesentlich langsamer ist als die beiden anderen Sessions-Speicher, würde die Integration von Redis für Onlineshops eine Steigerung der Performance bedeuten. Für Shopware lohnt sich also in jedem Fall eine Redis Integration. Sollte dies dennoch nicht gewünscht werden, empfehlen wir, für einzelne Webserver die Sessions von der Datenbank ins Dateisystem zu verlegen, um von unseren schnellen NVMe SSDs zu profitieren. Wie Redis in Shopware integriert wird, werden wir im nächsten Blogbeitrag dieser Blogserie ausführlich erklären.
Nur bei kleinen Magento Onlineshops hingegen, welche keine oder kaum parallele Zugriffe bzw. Conversion haben, lohnt sich die Integration von Redis nicht. Die schnellen NVMe SSDs, die auch zu unserer Architektur gehören, zeigten im Bereich Single Thread bei sequentiellen Zugriffszeiten eine höhere Leistung als Redis.
Shopsystem | Auslieferungszustand des Herstellers | Unsere Empfehlung für Sessions |
---|---|---|
Shopware - kleiner Shop | MySQL | Redis |
Shopware - mittlerer bis großer Shop | MySQL | Redis |
Magento 1 - kleiner Shop | Dateisystem | NVMe SSDs |
Magento 1 - mittlerer bis großer Shop | Dateisystem | Redis |
Magento 2 - kleiner Shop | Dateisystem | NVMe SSDs |
Magento 2 - mittlerer bis großer Shop | Dateisystem | Redis |
Weitere Beiträge dieser Blogserie
- Redis Teil 1 - Performance Optimierung für Shopware und Magento
- Redis Teil 2 - Anwendungscache Benchmark: Redis, NVMe SSDs und memcached
- Redis Teil 4 - Wie wird Redis in Shopware integriert?
- Redis Teil 5 - Wie wird Redis in Magento integriert?
Titelbild: raspirator/istock.com
Zuletzt aktualisiert am 09.06.2021 | JH