PHP workeri: koliko posetilaca tvoj sajt stvarno izdrži

Šareni kablovi i utičnice na serverskoj opremi, simbol PHP workera i kapaciteta sajta

Imaš sajt koji se otvara za sekundu kad ga testiraš sam, a čim stigne mejl kampanja ili objava na mrežama, počne da zapinje. Neko ti javi da mu se kasa ne učitava. Ti otvoriš sajt i radi savršeno. Takvi slučajevi su skoro uvek isti: ne troši se ni procesor ni memorija, nego nešto što se u ponudama retko piše, a zove se PHP worker.

U ovom tekstu ćeš videti šta je to, koji zahtevi ga zauzimaju, kako da grubo izračunaš koliko ti ih treba i šta se dešava kad ponestane. Bez magije i bez obećanja da će jedna postavka sve rešiti.

Šta je PHP worker, običnim rečima

WordPress je napisan u PHP-u. Svaki put kad server mora da "pokrene" WordPress da bi sastavio stranicu, to radi jedan proces koji izvršava PHP kod. Pressable ga opisuje kao proces koji izvršava PHP kod za jedan zahtev sajta u jednom trenutku. Taj proces je worker. Dok radi na jednom zahtevu, ne može da prihvati drugi.

Zamisli kafić sa tri konobara. Svaki konobar opslužuje jednog gosta odjednom. Ako dođe petoro gostiju, dvoje čeka. Ako svaka porudžbina traje dugo, red raste brzo. Gosti su posetioci, konobari su workeri, a porudžbina je jedan zahtev koji server treba da obradi.

Šta ne troši workera

Najvažnija stvar koju treba da znaš: stranica koja se servira iz keša uopšte ne zove PHP. Pressable to kaže jasno: potpuno keširane stranice ne trebaju workeru, serviraju se direktno posetiocu. Kinsta isto: svaki nekeširani zahtev obrađuje jedan PHP thread, a keširan sadržaj taj sistem preskače.

Zato običan blog sa kešom može da izdrži gomilu ljudi na vrlo malo workera. Članak koji čita hiljadu posetilaca, a svima se servira isti keširan HTML, praktično ne dotiče PHP.

Šta troši workera

Problem počinje kod svega što se ne može keširati ili što keš promaši. InstaWP navodi tipične primere: korpa i naplata, slanje formi, prikaz tuđeg naloga i istorije porudžbina, AJAX pozivi i sve u administraciji. Dodaj tome prijavljene korisnike (članarine, kursevi, forumi), jer oni obično zaobilaze keš, i pretragu sa filterima, koja je skoro uvek jedinstven upit.

Posebno su podmukli pozivi koje ne vidiš. Dok jedan čovek uređuje stranicu u Elementoru, admin panel šalje pozive u pozadini. Plugin za statistiku ili ugrađeni chat ume da zove server svakih nekoliko sekundi. Svaki takav poziv je posao za workera. Zato sajt "radi savršeno kad ga ti otvoriš", a kad ga otvori dvadeset ljudi odjednom, red se napravi.

Računica koju možeš da uradiš na papiru

Evo grubog modela. Uzmi broj workera i podeli ga sa prosečnim trajanjem jednog nekeširanog zahteva u sekundama. Dobiješ koliko takvih zahteva sajt može da obradi u sekundi pre nego što se red počne puniti.

Primer, izmišljen radi ilustracije, nisu merenja ničijeg sajta: imaš 4 workera, a stranica sa naplatom se generiše 0,4 sekunde. To je 4 podeljeno sa 0,4, dakle oko 10 zahteva u sekundi. Sad instaliraš dodatak koji mu produži obradu na 1,2 sekunde. Isto 4 workera sada daju oko 3,3 zahteva u sekundi. Nisi dodao nijednog posetioca, a kapacitet ti je pao na trećinu.

Iz toga se vidi nešto što većina ljudi promaši. Broj workera nije jedino što odlučuje. Jednako važno je koliko dugo svaki od njih radi. Sporiji upiti u bazi, težak plugin ili spoljni API koji kasni drže workera zauzetim, a to je kao da si ga ukinuo. O tome kako da nađeš plugin koji ti gura vreme odgovora pisali smo u tekstu o najčešćim razlozima zašto je sajt spor kad keš nije glavni problem.

Koliko workera ti zapravo treba

Nema univerzalne formule i svako ko ti je proda lažira preciznost. Ipak, hosting dokumentacija daje okvir. Kinsta ne preporučuje planove sa 2 threada za dinamične sajtove (prodavnice, članarine, kurseve, forume) i smatra 4 ili više razumnim minimumom. InstaWP u svom vodiču procenjuje ovako: mali blogovi 1 do 2 workera, poslovni sajtovi 2 do 3, manja WooCommerce prodavnica 3 do 4, prometna prodavnica 6 do 10. To su orijentiri jednog provajdera, ne zakon fizike, ali se slažu sa onim što se viđa u praksi.

Ključna rečenica ovde je da ti ne treba onoliko workera koliko imaš posetilaca. Treba ti onoliko koliko ljudi istovremeno traži nešto što nije u kešu. Sajt sa 50.000 poseta mesečno, uglavnom čitalaca bloga, može biti miran. Prodavnica sa 2.000 poseta, gde svi odjednom idu na naplatu posle mejl kampanje, može da se uguši.

Šta se dešava kad ponestane

Kad su svi workeri zauzeti, novi zahtevi staju u red. Ako se red isprazni dovoljno brzo, posetilac samo primeti da sajt sporije reaguje. Ako ne, Kinsta navodi da red počne da odbija zahteve, što daje 502 ili 504 greške ili nepotpune odgovore. Pressable pominje 429 i 504.

Najgore je što to izgleda kao "sajt je pao", a monitoring uptime-a ga i dalje prikazuje kao živog, jer tvoja naslovna iz keša odgovara savršeno. Tek kad neko pokuša da kupi nešto ili da se prijavi, vidi grešku. Dnevni izveštaj ti kaže 100 odsto, a ti u međuvremenu gubiš porudžbine.

Kod deljenog hostinga se zove drugačije

Ovde moramo biti precizni, jer na deljenom hostingu sa cPanelom ne postoji uvek polje koje se zove "PHP workeri". Najbliži pojam je ograničenje procesa po nalogu. Namecheap ga u svom vodiču objašnjava kao broj procesa koji ulaze u tvoj nalog, poznat i kao istovremene Apache konekcije, a kad se dostigne, server vraća grešku 508. Isti vodič dodaje da to nije ukupan broj posetilaca, jer se procesi obično završe tako brzo da je malo verovatno da ih deset radi istovremeno, osim pri velikom skoku saobraćaja.

Na našoj stranici sa specifikacijama svih paketa stoje brojevi za procese: WP Start ima 100/200, WP Advanced 250/500, a WP High-End 500/1000 (ulazni/aktivni). Pored toga su RAM (2, 4 i 8 GB) i broj CPU jezgara (4, 6 i 8). Ne tvrdim da se ti brojevi direktno prevode u "toliko workera", jer to zavisi od načina na koji je server podešen. Sa tim brojevima možeš da uporediš pakete, a ako te zanima kako se tvoj konkretan sajt ponaša, napiši podršci, koja radi radnim danima od 9 do 17.

Šta da uradiš, redom od jeftinog ka skupom

Prvo, keširaj sve što može da se kešira. Svaki zahtev koji ne stigne do PHP-a je zahtev koji ne troši workera. To je najjeftinija i najveća ušteda.

Drugo, izbaci ono što radi u pozadini, a nikome ne treba: dodatke za statistiku unutar admin panela, stare widgete, pozive ka spoljnim servisima koji kasne. Često je jedan plugin odgovoran za pola vremena obrade. Ako koristiš Elementor, u ovom postupku merenja vidiš koliko je Elementor kriv, a koliko nije.

Treće, odvoj ono što mora da bude dinamično. Naplata i korpa su nekeširani po prirodi, pa ih ubrzaj ostalim sredstvima: sredi bazu, proveri upite, ne vuci po deset skripti na stranici naplate. Ako imaš prodavnicu, pročitaj i kako izgleda hosting namenjen WooCommerce-u.

Četvrto, tek onda razmisli o jačem paketu. Više resursa pomaže, ali ako je jedan upit spor 3 sekunde, dupliranje workera samo duplira broj sporih upita koji teku istovremeno. Plati više tek kad središ ono što može da se središ, ne umesto toga.

Kako da proveriš da li si na granici

Nekoliko znakova da ti workeri nisu dovoljni: sajt je brz kad si sam, a spor u vreme kampanja; greške 502, 504 ili 508 koje se pojavljuju u talasima; administracija koja usporava kad neko drugi radi u njoj; porudžbine koje se "izgube" u vreme akcije. Ako se prepoznaš, zapiši vreme kad se desilo i pitaj hosting za logove procesa u tom trenutku. Bez toga se pogađa.

Ako još biraš gde da držiš sajt, pogledaj WordPress hosting pakete i uporedi ih sa onim što ti zaista treba, a ne sa onim što zvuči najimpresivnije. Ako ti sajt već ima problem, a ne znaš odakle, vidi i kako izgleda održavanje WordPress sajta.

Ukratko

Worker je jedan zauzeti red u kafiću. Keširane stranice ne staju u taj red, a korpa, naplata, prijavljeni korisnici i admin panel staju. Kapacitet zavisi i od broja workera i od toga koliko dugo svaki radi, pa je brži kod često jeftiniji od jačeg paketa. A kad poređuješ pakete, traži brojeve za procese, ne samo reči "brzo" i "neograničeno".

Ako te zanima kako se to uklapa u ono što donosi WordPress 7.0, pogledaj tekst o AI-ju u jezgru WordPressa.

Pročitaj i ovo

Prelaziš kod nas? Migracija je besplatna.

Naši eksperti će potpuno besplatno prebaciti tvoj postojeći sajt na naše servere.