Mały sklep internetowy z odzieżą roboczą na WooCommerce, 52 produkty, przejęty od poprzedniego wykonawcy
Wyzwanie
Według właściciela problem trwał od miesięcy, zanim sklep trafił do nas: serwer stale na 100 procentach, strony ładujące się bardzo długo i okresowe błędy, bo serwer nie odpowiadał na czas. Standardowe środki były próbowane i niczego nie zmieniły.
Godzina logów opowiedziała całą historię. Ze 172 057 żądań 68 110 szło na jeden adres kategorii z parametrami filtrów, w 68 238 różnych kombinacjach koloru i rozmiaru. Pochodziły z 57 622 różnych adresów, z których większość wysłała od jednego do pięciu żądań: domowe łącza internetowe w wielu krajach, prowadzone przez komercyjną sieć proxy rezydencjalnych. Podpis przeglądarki był podrobiony, a szacowany transfer około 90 GB na dobę oznaczał, że ktoś za tę operację płaci.
Rozwiązanie
Najpierw pomiar: ile serwer płaci za jedno żądanie każdego rodzaju. Plik statyczny 0,65 milisekundy, dowolne żądanie do WordPressa 90 do 120 milisekund, przefiltrowana lista produktów 257 milisekund. Pliki statyczne były większością żądań i 0,4 procent kosztu; żądania z filtrami były całym obciążeniem.
Potem reguła na brzegu sieci: zapora przed sklepem odrzuca ruch botów w najwcześniejszej fazie, zanim żądanie dotrze do WordPressa. Odrzucenie żądania kosztuje około milisekundy, wyrenderowanie listy 257. Rozpoznajemy ten ruch po tym, jak porusza się po sklepie, a nie po tym, skąd przychodzi. Gdy miesiąc później boty się dostosowały, druga reguła, oparta na zachowaniu nawigacyjnym prawdziwej przeglądarki, działała kilka minut po diagnozie. Każdą zmianę sprawdziliśmy pod kątem prawdziwych klientów: filtrowanie, wyszukiwarka, koszyk, zamówienie i wejścia z wyszukiwarek działają jak wcześniej.
Wyniki
- Serwer sklepu
- Z 926 % na 16 % CPU po pierwszej regule
- Serwer sklepu po adaptacji botów
- Z 905 % na 1 % w dwie minuty po drugiej regule
- Serwer bazy danych
- Ze 123 % na 0,01 % CPU
- Żądania z filtrami docierające do sklepu
- Z 68 110 na godzinę do kilkuset, wszystkie od ludzi
- Żądania odrzucone na brzegu
- Około 90 na sekundę
- Zmiany, które zauważyli klienci
- Żadnych: filtry, wyszukiwarka, koszyk i wejścia z wyszukiwarek bez zmian