Kontekst
Część długiej współpracy przy tintadlaplastykow.pl (custom CMS, 36k+ SKU, od 2022) — tu wątek: cache, wydajność i boty. Katalog ponad 36 000 pozycji (w tym archiwalne w bazie) obciążał TTFB, SQL i RAM. Scrapery cenowe i AI crawlery potrafiły wygenerować ~100 req/s i doprowadzić hosting do 503 — wyglądało to jak awaria sklepu.
Zakres
- Fragment cache — cache widoków (Symfony Cache) z blokami per użytkownik i invalidacją; bot dostaje statyczną odpowiedź zamiast PHP/bazy.
- Ochrona przed cache stampede — kolejka workerów na wygasające klucze; bez masowych zapytań do DB pod ruchem.
- Własny indekser produktów — sortowanie, paginacja i filtry 36k+ SKU bez obciążania głównej tabeli.
- Ograniczenie botów — rate limiting po ASN, Cloudflare WAF na AI crawlery, honeypoty; diagnostyka access logów.
- WebP i zadania w tle — asynchroniczna konwersja grafik; Symfony Console/Messenger do indeksów i kolejek.
- Chunking i idempotencja — paczki danych przy sync 36k SKU; odporność admina i workerów na powtórzone żądania.
Rezultat
- Sklep odpowiada szybciej przy mniejszym CPU/RAM; importy tysięcy SKU nie kładą witryny, a bot w najgorszym razie dostaje cache.
- Custom CMS, 36k+ SKU — fragment cache Symfony, ochrona przed stampede, indekser, WebP, boty ASN/WAF.
