Ključ za razumijevanje performansi Apache poslužitelja su višeprocesorski moduli (MPM). Ovi moduli određuju osnovu kako se Apache obraća višeprocesiranju. Višeprocesiranje znači istodobno izvođenje više operacija u sustavu s više centralnih procesorskih jedinica (CPU jezgre).
Postoji mnogo MPM-ova koje možete izabrati; međutim, ovaj se članak usredotočuje na najčešće korištene module koji se nalaze na VPS poslužiteljima zasnovanim na Linuxu. Ti su moduli:
- MPM Prefork
- MPM Worker
- MPM Event
- Other MPMs
MPM Prefork
Samoregulirajući MPM Prefork izvodi svog imenjaka iz načina na koji se preventivno račva ili kopira u nove identične procese da bi čekao dolazne zahtjeve. Ne-nitni pristup zasnovan na procesu u višeprocesiranju, MPM Prefork pokreće Apache u jednom matičnom poslužiteljskom procesu. Ovaj je roditelj odgovoran za upravljanje bilo kojim dodatnim podređenim poslužiteljima koji čine njegovo spremište poslužitelja. Dok koristi MPM Prefork, svaki podređeni poslužitelj obrađuje samo jedan zahtjev. Ovaj fokus pruža potpunu izolaciju od ostalih zahtjeva obrađenih na poslužitelju. MPM Prefork obično se koristi za kompatibilnost kada su potrebne ne-nitne knjižnice / softver, poput mod_php (DSO). S gledišta optimizacije, MPM Prefork može jako zaostajati u usporedbi s rješenjima s više niti, što zahtijeva znatno više resursa da bi se postigla slična razina prometa kao kod višenitnih MPMa. MPM Prefork zahtjeva resurse zbog potrebe stvaranja punih kopija Apachea za svaki zahtjev.
Izbjegavajte upotrebu MPM Preforka kad god je to moguće. Njegova nemogućnost dobrog skaliranja s povećanim prometom brzo će nadmašiti dostupni hardver na većini konfiguracija sustava.
MPM Worker
Hibridni internet poslužitelj s više niti i većom brzinom obrade. Na isti način kao i MPM Prefork, MPM Worker koristi isti pristup s jednim matičnim postupkom koji upravlja svom djecom unutar svog poslužiteljskog spremišta. Međutim, za razliku od MPM Prefork, ova su djeca višenitni procesi koji mogu istovremeno obrađivati desetke niti (zahtjeva). MPM Worker postavio je temelje višenitnoj višeprocesiranju na Apache poslužiteljima koji su postali stabilni u Apacheu 2.2. Konfiguracija s nitima omogućuje Apacheu da s lakoćom servisira stotine zahtjeva uz zadržavanje samo desetak podređenih procesa u memoriji. MPM Worker omogućuje rješenje za internet usluge s velikim kapacitetom i s malim resursima.
Direktiva KeepAliveTimeOut trenutno definira količinu vremena koje će Apache čekati na zahtjeve. Kada koristite KeepAlive s MPM Workerom, koristite najmanji KeepAliveTimeout moguć (po mogućnosti 1 sekundu).
MPM Event
Na temelju izvornog koda MPM Worker, MPM Event dijeli konfiguracijske smjernice s MPM Workerom. Djeluje gotovo identično kao MPM Worker, osim kada je riječ o rukovanju zahtjevima KeepAlive. MPM Event koristi posvećenu nit slušatelja u procesu svakog djeteta. Ova nit slušanja odgovorna je za usmjeravanje dolaznih zahtjeva na dostupnu radničku nit. Nit za preslušavanje rješava problem s kojim se suočio MPM Worker koji zaključava cijele niti u čekanju KeepAliveTimeout. Pristup slušatelja MPM Eventa osigurava da radničke niti ne “zaglave” čekajući da KeepAliveTimeout istekne. Ova metoda zadržava maksimalnu količinu radničkih niti koje obrađuju što je više zahtjeva moguće.
MPM Event je stabilan u Apacheu 2.4, starije verzije mogu koristiti MPM Worker kao alternativu.
Ostali MPM-ovi
Na raspolaganju je asortiman dodatnih MPM-ova. To su obično dio Apacheove integracije u operativne sustave koji nisu sustavi temeljeni na Unixu. Oni imaju specifične MPM-ove koji su zahtjevi ili koji koriste Apache na odgovarajućim vrstama sustava. Ove vrste MPM-ova izvan su nadležnosti ovog članka. Više informacija o određenom MPM-u možete pronaći u odjeljku Zadane vrijednosti MPM-a službene Apache dokumentacije.
Preporučujem da se klonite eksperimentalnih i nestabilnih MPM-ova. Nepouzdana priroda ovih vrsta softvera čini ih često ne upotrebljivim.
Koji je MPM najbolji?
Kad razmišljate o optimizaciji, bitno je shvatiti da ne postoji Apache-ova jednoobrazna konfiguracija. Ispravan odabir MPM-a zahtijeva analizu mnogih pokretnih varijabli poput prometa, koda internet mjesta, vrste poslužitelja, PHP rukovatelja i dostupnog hardvera. Svaki je poslužitelj jedinstven, čineći najbolji MPM potpuno subjektivnim izborom.
Ako vaš aplikacijski kôd ne podržava višenitnost, vaš će izbor neizbježno biti MPM Prefork isključivo na osnovi kompatibilnosti. MPM Prefork uključuje softverske module poput mod_php (DSO). MPM Worker bez KeepAlive vrlo dobro funkcionira ako je vaša aplikacija API sustav uravnoteženog opterećenja. Skalabilnost i fleksibilnost MPM Eventa dobar je izbor za hosting više malih i srednjih internet mjesta u konfiguraciji zajedničkog hostinga.
Većina jednostavnih postavki poslužitelja dobro funkcionira u okviru samoupravne zadane konfiguracije MPM Eventa, što ga čini idealnim polazištem za podešavanje optimizacije. Jednom odabran, MPM se zatim može premjestiti na Konfiguracijske smjernice kako bi pregledao koje se postavke odnose na performanse i optimizaciju poslužitelja.