Šta su Magento Cache, Full Page Cache i Varnish?
Brzina Magento prodavnice ne zavisi samo od PHP-a, baze podataka ili servera. Na vreme učitavanja značajno utiče i način na koji se keširaju konfiguracija, blokovi, stranice i HTTP odgovori. Magento Cache, Full Page Cache i Varnish imaju različite uloge, ali zajedno mogu znatno smanjiti opterećenje aplikacije i ubrzati prikaz sadržaja.
Magento Cache čuva podatke koje aplikacija često koristi, Full Page Cache čuva već generisane stranice, a Varnish može da posluži kao HTTP reverse proxy ispred Magento aplikacije. U nastavku su objašnjene razlike između ovih mehanizama, način rada i preporučena konfiguracija za produkciono okruženje.
Šta je Magento Cache?
Magento Cache je sistem keširanja unutar Magento aplikacije. On čuva različite vrste podataka, kao što su konfiguracija, layout XML, prevedene fraze, blokovi i generisani view fajlovi. Kada se podaci nalaze u kešu, Magento ne mora pri svakom zahtevu ponovo da ih učitava i obrađuje.
Ovaj mehanizam prvenstveno smanjuje broj ponovljenih operacija unutar aplikacije. Ne znači nužno da će kompletna HTML stranica biti isporučena bez pokretanja Magento-a, jer je to uloga Full Page Cache-a.
Šta je Full Page Cache?
Full Page Cache, odnosno FPC, čuva već generisan HTML odgovor za stranicu. Kada sledeći posetilac zatraži istu kešabilnu stranicu, Magento može da vrati sačuvan sadržaj bez kompletnog izvršavanja kontrolera, učitavanja svih blokova i ponovnog rada sa bazom podataka.
Magento podržava ugrađeni keš adapter, najčešće zasnovan na aplikacionom keširanju, kao i Varnish kao HTTP reverse proxy. Tačna dostupnost opcija i preporučena konfiguracija mogu zavisiti od verzije Magento Open Source ili Adobe Commerce izdanja.
Šta je Varnish?
Varnish je HTTP accelerator i reverse proxy koji se postavlja između korisnika i web servera. On može da kešira HTTP odgovore i da ih isporuči direktno, bez slanja svakog zahteva PHP-u i Magento aplikaciji.
Varnish je naročito koristan za javne, kešabilne stranice kao što su početna strana, kategorije i proizvodne stranice. Dinamički delovi, kao što su korpa, checkout i korisnički nalog, ne treba da se keširaju kao javni sadržaj.
Kako Magento Cache, Full Page Cache i Varnish rade zajedno?
Magento Cache čuva interne podatke aplikacije. Full Page Cache čuva kompletne HTML odgovore. Kada se koristi Varnish, on se nalazi ispred Magento-a i može da vrati keširanu stranicu pre nego što zahtev stigne do web servera i PHP procesa.
Tipičan tok zahteva izgleda ovako: korisnik šalje zahtev, Varnish proverava da li već postoji odgovarajući keširani odgovor, a ako ga nema, zahtev prosleđuje web serveru i Magento aplikaciji. Magento generiše odgovor, Varnish ga može sačuvati, a naredni kompatibilni zahtevi dobijaju sadržaj direktno iz Varnish keša.
Zašto su keš mehanizmi važni za performanse?
Bez pravilnog keširanja, svaki zahtev može da pokrene PHP, učita Magento konfiguraciju, izvrši upite prema bazi i generiše HTML. To povećava vreme odziva i troši CPU, memoriju i database resurse. Keš smanjuje broj takvih operacija i omogućava serveru da obradi više zahteva.
Keš ne rešava sve probleme sa performansama. Loši database upiti, prespor hosting, veliki JavaScript fajlovi, neoptimizovane slike i spori eksterni API pozivi mogu ostati usko grlo čak i kada je keš pravilno podešen.
Podešavanje Full Page Cache-a u Magento Admin-u
U Magento Admin-u otvorite Stores > Configuration > Advanced > System > Full Page Cache. U odeljku za keširanje izaberite odgovarajući keš backend. U produkciji se najčešće razmatra Varnish, dok ugrađeni mehanizam može biti dovoljan za jednostavnija okruženja ili testiranje.
Pre promene konfiguracije proverite da li je Varnish instaliran, da li sluša na očekivanom portu i da li web server pravilno prosleđuje zahteve. Magento može da generiše VCL konfiguraciju koju zatim treba prilagoditi stvarnom okruženju i učitati u Varnish.
Provera i upravljanje Magento kešom preko CLI-ja
Za pregled statusa keš tipova koristite:
php bin/magento cache:status
Za čišćenje keširanih podataka koristite:
php bin/magento cache:clean
Komanda cache:clean uklanja keširane stavke koje Magento može ponovo da generiše. Komanda cache:flush briše sadržaj keš storage-a i može uticati i na druge podatke u istom storage-u, pa je koristite oprezno, naročito na deljenom Redis ili sličnom okruženju.
Invalidacija keša posle izmene sadržaja
Kada promenite proizvod, kategoriju, cenovnik ili konfiguraciju, Magento može automatski označiti povezane keširane stranice za invalidaciju. Ako se promena ne vidi, proverite Magento Cache, Full Page Cache, Varnish i eventualni CDN keš. Ručno čišćenje celog sistema treba da bude poslednja, a ne prva opcija.
Prednosti i ograničenja
Magento Cache smanjuje ponovljeni rad aplikacije i važan je za stabilan rad. Full Page Cache može značajno da skrati vreme učitavanja javnih stranica. Varnish dodatno rasterećuje PHP i Magento jer keširane odgovore isporučuje na proxy nivou.
Ograničenje je to što dinamičan sadržaj zahteva pažljivo keširanje. Neispravna pravila mogu prikazati zastarele podatke ili sadržaj jednog korisnika drugom korisniku. Zbog toga korpa, checkout, customer stranice i personalizovani elementi moraju biti pravilno izuzeti ili obrađeni Magento mehanizmima kao što je privatni content.
Najčešći problemi sa Magento kešom i Varnish-om
Ako se promene ne prikazuju, proverite da li je sadržaj keširan u Magento-u, Varnish-u, CDN-u ili browseru. Ako korisnik vidi pogrešnu korpu ili podatke drugog naloga, odmah proverite pravila keširanja i privatni sadržaj. Takav problem može biti funkcionalni i bezbednosni rizik.
Ako je TTFB i dalje visok, keš možda nije pogođen ili backend i dalje obrađuje zahtev. Proverite response headere, logove web servera, Magento logove, PHP-FPM, database opterećenje i Varnish statistiku. Nemojte zaključivati da Varnish radi samo zato što je instaliran.
Preporučena konfiguracija za produkciju
Za produkcionu Magento prodavnicu preporučuje se da Magento Cache bude aktivan, da Full Page Cache bude pravilno podešen i da se Varnish koristi kada infrastruktura i saobraćaj to opravdavaju. Redis se često koristi za određene vrste Magento keša i sesije, ali konkretna podela zavisi od servera, verzije i konfiguracije projekta.
Pre svake veće izmene napravite proverljivu konfiguraciju i testirajte početnu stranu, kategoriju, proizvod, pretragu, korpu, checkout i korisnički nalog. Performanse merite alatima i server metrikama, umesto da se oslanjate samo na subjektivni osećaj brzine.
Da li je Varnish obavezan za Magento?
Ne u svakom projektu. Magento može raditi sa ugrađenim Full Page Cache mehanizmom, ali Varnish često ima smisla za prodavnice sa većim brojem javnih zahteva i zahtevima za nižim vremenom odziva.
Da li Magento Cache i Full Page Cache znače isto?
Ne. Magento Cache čuva interne podatke aplikacije i generisane resurse, dok Full Page Cache čuva kompletne odgovore stranica. FPC je samo jedna kategorija keširanja unutar šireg sistema.
Da li posle svake izmene treba koristiti cache:flush?
Ne. Najpre koristite Magento mehanizme za invalidaciju i, kada je potrebno, cache:clean. cache:flush može obrisati širi sadržaj storage-a i treba ga koristiti samo kada razumete posledice.
Zašto se proizvod promenio u Admin-u, ali ne i na sajtu?
Promena može biti sakrivena u Magento Cache-u, Full Page Cache-u, Varnish-u ili CDN-u. Proverite invalidaciju, response headere i redosled keš slojeva pre nego što brišete ceo keš.
Da li Varnish kešira checkout i korisnički nalog?
Te stranice ne treba tretirati kao javne keširane stranice. Pravila moraju sprečiti deljenje privatnog i dinamičkog sadržaja između korisnika.
Magento Cache, Full Page Cache i Varnish rešavaju različite nivoe istog problema: smanjuju nepotreban rad aplikacije i ubrzavaju isporuku sadržaja. Za većinu produkcionih prodavnica osnovu čine aktivan Magento Cache i pravilno podešen FPC, dok Varnish donosi dodatnu korist kada je saobraćaj veći ili je potrebno rasteretiti PHP i web server.