Erfahrt, wie wir everysize’s Server für den Besucheransturm bei der Gründershow gerüstet haben.
everysize ist die erste Online-Suchmaschine, die sich auf die Schuhgröße spezialisiert hat. Hier kann man nicht nur eine Vielzahl an Online-Shops gleichzeitig durchsuchen, sondern auch gezielt nach seiner individuellen Größe suchen. Ein Live-Verfügbarkeitsabgleich und die direkte Anbindung an die wichtigsten Shops für Sneaker und Schuhe ermöglichen es, alle relevanten Produkte gebündelt auf einer Seite zu finden. So kann man nach Schuhgröße, Lieblingsfarbe, Marke oder Preis filtern und direkt beim entsprechenden Shop bestellen. Das vereinfacht und beschleunigt das Online-Shopping nach Schuhen erheblich. Derzeit bietet everysize über 20.000 verschiedene Sneaker von mehr als 80 Marken und über 40 Partner-Stores an.
Eine häufige Frage, die uns gestellt wird: Wie sieht die perfekte Server-Infrastruktur für einen Auftritt bei “Die Höhle der Löwen” aus? Die Antwort: Es gibt keine universelle Lösung, da jede Hochlastoptimierung einzigartige Anforderungen an die Server-Infrastruktur stellt. Jede Website hat unterschiedliche Schwachstellen, die die Hochverfügbarkeit beeinträchtigen können. Daher gibt es mehrere mögliche Szenarien und Wege, die zu einer erfolgreichen Optimierung führen können.
Mit den Gründern von everysize hatten wir das Glück, dass sie sich kurz nach der Aufzeichnung ihres Pitches an uns wandten. So hatten wir mehrere Monate Zeit, um das perfekte Setup gemeinsam mit den technisch versierten Jungs zu erarbeiten. Eine klare Anforderung war von Anfang an: Die Server-Infrastruktur sollte nicht nur den Auftritt bei “Die Höhle der Löwen” überstehen, sondern auch die Basis für das stabile Wachstum der Plattform darstellen. Ausfallsicherheit und schnelle Ladezeiten standen dabei stets im Vordergrund. Da die Server bereits bei Amazon Web Services (AWS) gehostet wurden, entschieden wir uns, dieses Setup teilweise zu übernehmen und um weitere Komponenten zu ergänzen.
Cloudflare nutzen wir in unserer Architektur nicht nur als leistungsfähiges Content Delivery Network (CDN) für alle Assets (CSS, JS und Bilder), sondern vor allem als ersten Load Balancer. Der Traffic wird auf die zwei darunterliegenden Load Balancer der AWS-Infrastruktur weitergeleitet. Cloudflare übernimmt auch die DDoS-Protection, die bei “Die Höhle der Löwen”-Ausstrahlungen immer wichtiger wird.
Um Ausfallsicherheit zu gewährleisten, haben wir zwei nginx / HAProxy Load Balancer eingerichtet. Diese Server verteilen die Anfragen auf die Webserver und sorgen für großzügiges Caching der Inhalte. Inhalte werden teilweise von Cloudflare und dem eigenen Cache zwischengespeichert.
Die Webserver sollten möglichst wenig belastet werden. Dynamische Requests müssen jedoch bearbeitet werden. Drei gut dimensionierte Server hielten der erwarteten Last gut stand. Um zwischen den Servern Daten synchron zu halten, verwendeten wir Amazon Elastic File System (EFS) und schlossen einige Daten (z.B. Logfiles) aus, um die Bandbreite nicht zu sehr zu beanspruchen.
Für Ausfallsicherheit bei der Datenbank setzten wir auf Amazon Aurora im Cluster. Die beiden Datenbankserver waren ausreichend dimensioniert und in zwei getrennten Zonen gestartet.
Zusätzlich zur Datenbank verwendeten wir Redis, um einige Daten der Webseite in einen RAM-basierten Cache auszulagern. Diese Server werden im Cluster betrieben und sorgen ebenfalls für Ausfallsicherheit.
Die Suche ist das zentrale Element der Webseite. Suchanfragen von den eigenen Servern bearbeiten zu lassen, war keine Option. Wir empfahlen den Entwicklern von everysize, “Algolia” (https://www.algolia.com/) zu verwenden. Algolia ist ein flexibler Suchindex, der über JavaScript-Libraries auf der Webseite läuft und die Server nicht belastet. Aus Usability-Sicht nicht ganz optimal, aber kosteneffizient.
Das Caching einer hochdynamischen Seite wie everysize ist nicht einfach. Die Suche muss aktuelle Informationen aus den Partnershops liefern und gleichzeitig müssen Daten aus Performance-Gründen so lange wie möglich gecached werden. Der Cache musste so konzipiert sein, dass einzelne Elemente und Daten invalidiert werden können. Dies ist notwendig, wenn der Crawler neue Informationen findet und diese angezeigt werden sollen.
Wir nutzen Cloudflare intensiv, doch Cloudflare unterstützt kein Wildcard-Purging. Wir implementierten einen eigenen Cache mit Wildcard-Purging, der DELETE-Anfragen an eine URL erlaubt – natürlich nur über speziell freigegebene IP-Adressen. So konnten die Entwickler von everysize gezielt Cache-Daten löschen.
Für das asynchrone Mitloggen von Seitennutzungsdaten setzten wir unseren bewährten Hochlast-Log-Server auf nginx-Basis ein. Dieser schreibt die Daten in eine hochverfügbare Logfile-Struktur, die die Entwickler jederzeit abfragen können. URL-Parameter von Werbesystemen wie Google AdWords entfernten wir über einen nginx-Proxy-Server, um gecachte Versionen auszuliefern.
Für bestmögliche Ausfallsicherheit betrieben wir Loadbalancer, Web- und Datenbankserver in unterschiedlichen AWS-Zonen.
Wir hatten ursprünglich mit 60.000 bis 80.000 gleichzeitigen Nutzern gerechnet und das Server-Setup entsprechend getestet. Am Ende wurden es über 120.000 gleichzeitige Nutzer.
Das Setup hielt stand! Am gesamten Abend zählten wir über 250.000 Besucher auf der Webseite.
Cloudflare verarbeitete fast 37 Millionen Requests, wovon 30 Millionen gecached wurden. In Google Analytics sahen die Zahlen beeindruckend aus. Das gesamte Setup hat erfolgreich gehalten und wir sind mehr als zufrieden mit den Ergebnissen dieser Optimierung.