Blog članak

Objašnjeni Apache MPM moduli: Prefork vs Worker vs Event

Saznajte kako se Apache Prefork, Worker i Event MPM razlikuju kako biste odabrali pravi procesni model za performanse i stabilnost.

Temelj razumijevanja performansi Apache poslužitelja su MultiProcessing moduli, odnosno MPM-ovi. Oni određuju osnovni način na koji Apache rješava višeprocesnu obradu, odnosno paralelno izvršavanje više operacija u sustavu s više CPU jezgri.

Postoji više MPM-ova, ali ovaj se članak usredotočuje na najčešće module na Linux VPS poslužiteljima:

  • MPM Prefork
  • MPM Worker
  • MPM Event
  • ostali MPM-ovi

MPM Prefork

Samoregulirajući MPM Prefork ime je dobio po tome što preventivno forka, odnosno kopira sam sebe u nove identične procese koji čekaju dolazne zahtjeve. Riječ je o nedretvenom (non-threaded), procesno utemeljenom pristupu višeprocesnoj obradi. Apache pritom radi s jednim glavnim parent procesom koji upravlja dodatnim child procesima u svom skupu poslužiteljskih procesa. Svaki child proces obrađuje samo jedan zahtjev, što donosi potpunu izolaciju od drugih zahtjeva na poslužitelju.

MPM Prefork obično se koristi radi kompatibilnosti kada su potrebne nedretvene biblioteke ili softver poput mod_php (DSO). No iz perspektive optimizacije često značajno zaostaje za višedretvenim rješenjima jer traži mnogo više resursa za sličnu razinu prometa. Resursno je zahtjevan zato što za svaki zahtjev mora pokrenuti potpunu kopiju Apachea.

Kad god je moguće, izbjegavajte MPM Prefork. Zbog lošeg skaliranja s većim prometom brzo će pojesti dostupan hardver na većini konfiguracija.

MPM Worker

Riječ je o hibridnom pre-forking, višedretvenom (multi-threaded) modelu web poslužitelja za višeprocesnu obradu. Kao i Prefork, Worker koristi jedan glavni parent proces koji upravlja child procesima u skupu poslužiteljskih procesa. No za razliku od Preforka, child procesi su višedretveni i mogu istodobno obrađivati desetke zahtjeva.

MPM Worker postavio je temelje za višedretvenu višeprocesnu obradu u Apache poslužiteljima i postao stabilan u Apacheu 2.2. Dretvena konfiguracija omogućuje Apacheu da s lakoćom obrađuje stotine zahtjeva, a da pritom u memoriji zadrži tek desetak child procesa. Zato je Worker istodobno rješenje visokog kapaciteta i relativno niske potrošnje resursa.

KeepAliveTimeout ovdje definira koliko dugo Apache čeka nove zahtjeve. Ako koristite KeepAlive s MPM Workerom, taj timeout treba biti što manji, idealno 1 sekunda.

MPM Event

MPM Event temelji se na izvornom kodu MPM Workera i dijeli iste konfiguracijske direktive. Radi gotovo jednako kao Worker, osim u načinu obrade KeepAlive zahtjeva.

MPM Event koristi poseban listener thread u svakom child procesu. Taj listener thread odgovoran je za usmjeravanje dolaznih zahtjeva prema slobodnom worker threadu. Time se rješava problem koji postoji kod MPM Workera, gdje se threadovi mogu zaključati čekajući da KeepAliveTimeout istekne. Kod MPM Eventa worker threadovi zato ne ostaju zarobljeni u čekanju, što zadržava maksimalan broj dostupnih threadova za obradu novih zahtjeva.

MPM Event stabilan je u Apacheu 2.4. Na starijim verzijama MPM Worker može biti prihvatljiva alternativa.

Ostali MPM-ovi

Postoji i niz dodatnih MPM-ova. Oni su uglavnom povezani s integracijom Apachea u operativne sustave koji nisu bazirani na Unixu. Takvi MPM-ovi obično su specifični zahtjevi određenog sustava i izlaze iz okvira ovog članka. Više informacija možete pronaći u odjeljku MPM Defaults službene Apache dokumentacije.

Preporučujem da se držite podalje od eksperimentalnih i nestabilnih MPM-ova. Nepouzdana priroda takvog softvera čini ih teškima za ozbiljnu produkcijsku upotrebu.

Koji MPM je najbolji

Kod optimizacije je važno razumjeti da ne postoji jedna univerzalna Apache konfiguracija koja odgovara svima. Ispravan izbor MPM-a traži analizu više promjenjivih faktora kao što su promet, kod same stranice, tip poslužitelja, PHP handler i dostupan hardver. Svaki je poslužitelj drugačiji, zato je i najbolji MPM uvijek pomalo subjektivan izbor.

Ako vaš aplikacijski kod ne podržava višedretvenost, izbor će gotovo sigurno pasti na MPM Prefork zbog kompatibilnosti. MPM Worker bez KeepAlive može vrlo dobro raditi ako imate visokoučinkovit, load-balanced API sustav. Skalabilnost i fleksibilnost MPM Eventa čine ga vrlo dobrim izborom za hosting više manjih do srednjih stranica unutar shared hosting okruženja.

Većina jednostavnijih poslužiteljskih konfiguracija sasvim dobro radi na samoregulirajućoj zadanoj konfiguraciji MPM Eventa, zbog čega je to vrlo dobar početni izbor za podešavanje. Kada odaberete MPM, sljedeći korak je pregled konfiguracijskih direktiva koje stvarno utječu na performanse.

Povezana područja

Ova su područja rada usklađena s temom članka i daju čišći prijelaz od edukativnog sadržaja do konkretne implementacije.

Nastavite čitati

Prvo po zajedničkim kategorijama, a zatim po najjačem preklapanju u tagovima.