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 servera su Multiprocessing Modules odnosno MPM-ovi. Oni određuju osnovni način na koji Apache rješava multiprocessing, odnosno paralelno izvršavanje više operacija u sustavu s više CPU jezgri.

Postoji više MPM-ova, ali ovaj članak fokusira se na najčešće module koji se nalaze na Linux VPS serverima:

  • 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. Radi se o non-threaded, process-based pristupu multiprocessingu. Apache pritom radi s jednim glavnim parent procesom koji upravlja dodatnim child procesima u svom server poolu. Svaki child proces obrađuje samo jedan zahtjev, što donosi potpunu izolaciju od drugih zahtjeva na serveru.

MPM Prefork obično se koristi radi kompatibilnosti kada su potrebne non-threaded biblioteke ili softver poput mod_php (DSO). No iz perspektive optimizacije često značajno zaostaje za multi-threaded 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, multi-threaded multiprocessing web server modelu. Kao i Prefork, Worker koristi jedan glavni parent proces koji upravlja child procesima u server poolu. No za razliku od Preforka, child procesi su multi-threaded i mogu istodobno obrađivati desetke zahtjeva.

MPM Worker postavio je temelje za multi-threaded multiprocessing u Apache serverima i postao stabilan u Apacheu 2.2. Threaded 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 directive. 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 Unix-bazirani. 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 MPM Defaults sekciji 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 servera, PHP handler i dostupan hardver. Svaki je server drugačiji, zato je i najbolji MPM uvijek pomalo subjektivan izbor.

Ako vaš application code ne podržava multi-threading, izbor će gotovo sigurno pasti na MPM Prefork zbog kompatibilnosti. MPM Worker bez KeepAlive može vrlo dobro raditi ako imate high-performance, 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 server setupa sasvim dobro radi na samoregulirajućoj zadanoj konfiguraciji MPM Eventa, zbog čega je to vrlo dobar početni izbor za tuning. Kada odaberete MPM, sljedeći korak je pregled konfiguracijskih direciva koje stvarno utječu na performanse.

Povezane usluge

Ove su usluge usklađene 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.