Ein kleiner Onlineshop für Arbeitskleidung auf WooCommerce, 52 Produkte, von einem früheren Dienstleister übernommen
Ausgangslage
Nach Angabe des Inhabers bestand das Problem schon Monate, bevor der Shop zu uns kam: der Server dauerhaft bei 100 Prozent, Seiten, die sehr langsam luden, und zeitweise Fehler, weil der Server nicht rechtzeitig antwortete. Standardmaßnahmen waren versucht worden und hatten nichts geändert.
Eine Stunde Logs erzählte die Geschichte. Von 172 057 Anfragen gingen 68 110 an eine einzige Kategorieadresse mit Filterparametern, in 68 238 verschiedenen Kombinationen aus Farbe und Größe. Sie kamen von 57 622 verschiedenen Adressen, von denen die meisten zwischen einer und fünf Anfragen schickten: private Internetanschlüsse in vielen Ländern, geleitet durch ein kommerzielles Netz aus Residential Proxies. Die Browserkennung war gefälscht, und der geschätzte Transfer von etwa 90 GB am Tag hieß, dass jemand für die Operation bezahlte.
Lösung
Zuerst die Messung: Was eine Anfrage jeder Art den Server kostet. Eine statische Datei 0,65 Millisekunden, jede Anfrage an WordPress 90 bis 120 Millisekunden, eine gefilterte Produktliste 257 Millisekunden. Die statischen Dateien waren der Großteil der Anfragen und 0,4 Prozent der Kosten; die Filteranfragen waren die ganze Last.
Dann eine Regel am Rand des Netzes: Die Firewall vor dem Shop weist den Bot-Verkehr in ihrer frühesten Phase ab, bevor eine Anfrage WordPress erreicht. Eine Anfrage abzuweisen kostet etwa eine Millisekunde, eine Liste zu rendern 257. Wir erkennen den Verkehr daran, wie er sich durch den Shop bewegt, nicht daran, woher er kommt. Als die Bots einen Monat später nachzogen, stand eine zweite Regel auf Basis des Navigationsverhaltens eines echten Browsers Minuten nach der Diagnose. Jede Änderung wurde gegen echte Kunden geprüft: Filtern, Suche, Warenkorb, Bestellung und Besuche aus Suchmaschinen funktionieren wie zuvor.
Ergebnisse
- Server des Shops
- Von 926 % auf 16 % CPU nach der ersten Regel
- Server des Shops, nachdem die Bots nachgezogen hatten
- Von 905 % auf 1 % innerhalb von zwei Minuten nach der zweiten Regel
- Datenbankserver
- Von 123 % auf 0,01 % CPU
- Filteranfragen, die den Shop erreichen
- Von 68 110 pro Stunde auf einige Hundert, alle von Menschen
- Am Rand abgewiesene Anfragen
- Etwa 90 pro Sekunde
- Änderungen, die Kunden bemerkt haben
- Keine: Filter, Suche, Warenkorb und Besuche aus Suchmaschinen unverändert