Projekty

Case study

Tinta — Cache i wydajność

Tinta Dla Plastykówtintadlaplastykow.pl

Custom CMS
Symfony Components
Caching
Performance
WebP
Bots
36k+ SKU

Custom CMS, 36k+ SKU — wolny TTFB, stampede cache i boty (~100 req/s) kończyły się 503. Fragment cache, indekser, WebP i WAF → stabilny sklep pod ruchem i scraperami.

Optymalizacja wydajności — Tinta Dla Plastyków

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.