E-Commerce & Performance

Die Skalierbarkeit im Blick: Performantere Onlineshops mit Docker

Ender Özgür

© Shutterstock / William Potter

Der Wettbewerb zwischen Online-Händlern ist größer denn je. Händler stehen vor der Herausforderung, sich mit ihren Onlineshops von der Masse abzugrenzen. In Zeiten, in denen die Produktvielfalt, Individualität und Emotionalität immer mehr zum Selbstverständnis werden, wird ein Erfolgsfaktor vernachlässigt: die Performance des Shops. Ender Özgür, Head of Software Factories bei Neofonie, beschreibt den Faktor „Performance“ als Mittel im Kampf um den Online-Shopper.

Performance betrachtet die Geschwindigkeit, mit der beispielsweise ein Onlineshop geräteunabhängig lädt. „Je schneller, desto besser“, lautet die Devise. Für den Kunden ist die Performance entscheidend: Wird der potenzielle Kunde beim ersten Besuch der Website mit unnötigen Ladezeiten auf die Geduldsprobe gestellt, ist er weg, bevor er überhaupt gewonnen werden konnte. Bei schlechter Performance steht einem rasanten Abstieg im Google Ranking nichts mehr im Wege, folglich sinken die Conversions und Onlineshops kämpfen mit Umsatzzielen. Eine fortwährende Abwärtsspirale auf dem Weg zur Irrelevanz! Wenig hilfreich ist dabei der derzeitige Trend, Shops mit Plug-ins zu überladen, auch wenn sie viele nützliche Funktionen bieten.

Emotional Commerce braucht eine Performance-Betrachtung

Angetrieben durch Storytelling und Emotionen im Onlinehandel bieten Shops vielfältige Informationen in Form unterschiedlichster Medienformate wie Bildern, Videos oder interaktiven Grafiken, um den Kunden zu begeistern. Folglich steigen die Anforderungen an die Rechenleistung und im schlechtesten Fall werden die Performance, die Hochverfügbarkeit und die Skalierbarkeit des Systems tendenziell vermindert.

Hochverfügbar und skalierbar – das müssen Onlineshops können

Die große Herausforderung besteht für Shop-Betreiber darin, das steigende Produktangebot und Funktionsangebot hochverfügbar und skalierbar darzustellen. Für Onlineshops bedeutet Hochverfügbarkeit, dass der Besuch oder der Kaufvorgang unterbrechungsfrei durchgeführt werden kann. Das betrifft den Fall, wenn z.B. Wartungsarbeiten durchgeführt, neue Funktionen released werden oder ein Server abstürzt. Schafft es ein Onlineshop die Skalierbarkeit zu optimieren, zeigen sich weitere Vorteile:

  • Schnelle Shop-Antwortzeiten trotz massiver Systemnutzung, z.B. während laufender Online-Kampagnen
  • Expansion in andere Länder wird vereinfacht
  • Produktsortiment kann schnell ausgebaut werden
  • Schnellere Produktsuchen, z.B. indem der Suchserver ausgelagert wird
  • Schnellere Produktvorschläge
  • Optimierung der Bestellmenge/Durchsatz in kürzester Zeit

Das Zusammenspiel aus Hochverfügbarkeit und Skalierbarkeit ist die Basis für performante Webseiten und Onlineshops.

DevOpsCon Whitepaper 2018

Free: 40+ pages of DevOps expert knowledge

Learn about Containers,Continuous Delivery, DevOps Culture, Cloud Platforms & Security with articles by experts like Kai Tödter (Siemens), Nicki Watt (OpenCredo), Tobias Gesellchen (Europace AG) and many more.

Shopware und Docker

Eine repräsentative Befragung der Bitkom Research im Auftrag des Digitalverbands Bitkom bestätigt: Knapp 42 Prozent der Deutschen bestellen ihre Medikamente in Online-Apotheken. Die Online-Apotheke eurapon hat mehr als 100.000 Produkte im Angebot. Neben der Produktvielfalt müssen sie eine hohe Zahl an Seitenaufrufen bewältigen, sowie eine stabile, performante Verarbeitung der Bestellungen garantieren.

Im Folgenden möchte ich darstellen, wie die Online-Apotheke zu einem skalierbaren Shop ausgebaut wurde, um dessen Dienste hochverfügbar und performant zu machen.

Kenne die Bottlenecks

Grundsätzlich wird im Vorfeld empfohlen, zunächst einmal zu verstehen, an welcher Stelle Performance Bottlenecks auftreten bzw. erwartet werden (z.B. Datenbankabfragen oder Cache Hit Rate). Dafür gibt es entsprechende Analyse-Tools wie beispielsweise MySQL Query Analyzer oder den PHP Profiler Tideways. Nach der Auswertung der Messzahlen ergibt sich ein besseres Bild, an welchen Stellen im System bzw. bei welchen Services der eigentliche Handlungsbedarf besteht.

Als Basis wird die Standard-Shopware-Architektur verwendet. Dabei unterliegen alle Varianten unterhalb der Enterprise Edition des Herstellers den gleichen Limitierungen:

  • Die Zuweisungen von Services (wie z.B. Datenbank, Suche, Proxy) zu VMs verläuft statisch
  • Es gibt genau eine Shopware-Instanz
  • Es gibt genau eine Datenbankinstanz
  • Keine Möglichkeit der horizontalen Skalierung

Damit waren die Herausforderungen auch recht schnell klar, nämlich von diesen Limitierungen ausgehend, einen skalierbaren und hochverfügbaren Shop bereitzustellen, der auch bei regelmäßigen Marketingaktionen, die mit sehr hohem Traffic-Aufkommen verbunden sind, stabil läuft.

Von der Zahlenseite her sieht es dann wie folgt aus:

  • Der Shop bietet 250.000 Artikel
  • Zu den normalen Peak-Zeiten außerhalb der Marketingaktionen erfolgen 200 Bestellungen pro Minute
  • Diese entsprechen über 2500 Hits pro Sekunde auf dem Webserver
  • Garantierte Zero Downtime bei Software-Rollouts, Änderungen und Wartungen am System

Infrastruktur

Die Lösung besteht zunächst aus zwei Schritten, nämlich die Bereitstellung einer adäquaten Infrastruktur und die Aufteilung und Anpassung der Architektur mit der Einführung weiterer Komponenten.

Damit das Gesamtsystem horizontal skalieren kann, wurde auf eine Cloud-Infrastruktur auf Basis von Docker Swarm (als Alternative zu Kubernetes) gesetzt. Dieses unterstützt die Orchestrierung von Containern und eignet sich gut für Infrastrukturprojekte mittlerer Größe. Dabei liegen innerhalb des Docker Swarm Clusters die Managementfunktionen (Verwaltung der Cluster Infrastruktur) in einer redundanten Gruppe von Swarm Manager Nodes vor. Die Services laufen hingegen in sogenannten Swarm Worker Nodes, dort werden dann auch die Docker Container gestartet.

Der Cloud-Ansatz unterstützt die Option, z.B. mehrere Frontend- und Datenbank-Instanzen zu starten und liefert Infrastruktur-Features wie beispielsweise Autorecovery und Autorestart gleich mit.

Im Bereich der Systemarchitektur spielen die grundlegenden Erkenntnisse aus der vorherigen Performance-Analysephase mit hinein und sorgen in diesem Beispiel für:

  • Eine Trennung zwischen Shopware Backend und Frontend
  • Für den Einsatz einer Cluster-Lösung für MySQL
  • Caching-Lösungen in Form von memcached und Redis
  • Die weitere Anbindung zusätzlicher Services (DB Proxy, Traffic Limiter)

Das Shopware Backend ist eine eigene Instanz, die nur einmal gestartet wird und nicht skalieren muss. Dafür können beliebig viele Shopware-Frontend-Instanzen existieren, die vom Backend mit Content beliefert werden. Als Cluster-Lösung wurde MySQL Galera Cluster von Percona aufgrund des komfortablen Replikations-APIs ausgewählt.

Das bedeutet, dass jedes Einzelsystem als Docker Image eingepackt, für den Rollout vorbereitet und mehrfach als Container gestartet werden kann. Die Zuweisung von Containern zu Nodes erfolgt nicht mehr statisch – diese Arbeit wird von Docker Swarm über eine vorab erstellte Zielkonfiguration automatisch übernommen. Mit der Einführung von Docker Containern und Docker Swarm ändert sich auch der Deployment-Prozess dahingehend, dass man flexibler und schneller auf erforderliche Änderungen eingehen kann.

Verteilte Last

Der Einstiegspunkt einer Nutzeranfrage erfolgt in unserem Beispiel über einen klassischen Hardware-Loadbalancer, der die Last auf die verschiedenen Worker Nodes verteilt. In der zweiten Ebene, wenn es darum geht, Hostnamen aufzulösen und Services anzusprechen, wird diese Arbeit vom Swarm Loadbalancer übernommen – hilfreich dafür war der Einsatz des Tools traefik.io. Lediglich bei der Kommunikation zwischen Shopware Frontend und dem Galera Cluster musste eine zusätzliche Komponente in Form eines Datenbank-Proxys zwischengeschaltet werden, der im Ausnahme- oder Wartungsfall die Datenbankanfragen automatisch umleitet.

Die regelmäßig pro Quartal durchgeführten Marketingaktionen (Überraschungsbox) stellen den Onlineshop vor eine weitere Herausforderung, dieser muss nämlich einen Besucheransturm zu einer vorab kommunizierten Zeit standhalten, bis der Verkauf der limitierten Edition (2000 Stück) abgeschlossen ist. Dafür wurde ein spezieller HAProxy bereitgestellt (Traffic Limiter), der sich „on-the-fly“ anhand der aktuellen Last steuern lässt und einen konfigurierbaren Prozentsatz der Shop-Besucher durchlässt. Die verbleibenden Besucher werden auf eine Warteseite geleitet und mit einer Session ID ausgestattet, die dazu dient, den Besucher bei der nächsten Gelegenheit automatisch auf das Shopware Frontend zu lenken.

Die Trennung zwischen Shopware Backend und Frontend ist zwar ein wichtiger Schritt für die Vorbereitung auf ein skalierbares System, dies bringt jedoch weitere Fragestellungen mit sich, die gelöst werden müssen. Beispielsweise müssen die Mediendateien, die redaktionell im Backend gepflegt werden, auf die Frontend-Instanzen übertragen werden, dies geschieht mit Hilfe eines rsync daemons. Darüber hinaus müssen die Caches der Frontend-Instanzen mittels eines Cache Proxys aktualisiert werden, sobald ein Artikel redaktionell aktualisiert oder gelöscht wurde.

Performante Onlineshops – die Zukunft des E-Commerce?

Was das für die Konzeption und Entwicklung von performanten Onlineshops in Zukunft bedeutet:

Zusätzliche Komplexität:

  • Content-Replikation
  • Cache-Invalidierung
  • Bei mehreren verteilten Komponenten wird die Fehlersuche erschwert

Zusätzliche Arbeit:

  • Entwicklung außerhalb des Shopware-Standards, d.h. im Cluster, hat Auswirkungen auf die Arbeitsprozesse der Entwicklung, QA und Operations

Zusätzliche Tools:

  • Kibana, Elasticsearch, fluentd Logfile Analyse
  • Docker Swarm Management (Portainer)

Die Vorteile auf einen Blick:

  • Hohe Wiederverwendbarkeit der Komponenten durch Docker-Images-Baukasten
  • Schnelles und einfaches Aufsetzen neuer Umgebungen
  • Einfaches Hinzufügen neuer Shopware- oder Datenbank-Instanzen
  • Hosting Provider unabhängig
  • Unterbrechungsfreie Wartung oder Deployment
  • Autorestart von Services
  • Hoher Automatisierungsgrad u.a. gute Unterstützung bei QA und Performance Testing
Geschrieben von
Ender Özgür
Ender Özgür
Ender Özgür wurde 1972 in Berlin geboren und hat Informatik an der TU Berlin studiert. Er ist bereits seit 2001 Teil der Neofonie und verantwortet als Head of Software Factories die zeitgemäße Umsetzung von Entwicklungsprojekten. Zu seinem Team zählen 30 Entwickler.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: