W oparciu o opisy zarówno narzędzia Prefork, jak i Worker MPM, wydaje się, że typ prefork jest nieco przestarzały, ale tak naprawdę nie mogę znaleźć odpowiedniego porównania tych dwóch typów.
Co chciałbym wiedzieć:
- Jakie są różnice między dwiema wersjami?
- Jakie są (nie) zalety każdego typu serwera?
- Czy istnieją jakieś podstawowe wytyczne dotyczące tego, który typ wybrać na podstawie warunków?
- Czy istnieją między nimi duże różnice w wydajności?
apache-2.2
mpm-worker
mpm-prefork
Aron Rotteveel
źródło
źródło
Odpowiedzi:
Jak mówią doktorzy, powinieneś użyć prefork MPM, jeśli chcesz uniknąć wątków w celu zapewnienia zgodności z bibliotekami nie-bezpiecznymi dla wątków. Zazwyczaj każdy nietrywialny moduł Apache (
mod_php
- a ściślej miriada rozszerzeń i bibliotek, do których się łączy - będący przykładem kanonicznym) ma jakąś bibliotekę nie bezpieczną dla wątków (lub ma nie-wątkową bibliotekę bezpieczny kod), więc jeśli nie używasz dość standardowej instalacji Apache, wybrałbym prefork MPM.źródło
php-fpm
pośrednictwem FastCGI. Wtedy MPM procesu roboczego jest w porządku - wtedy fpm uruchomi każde żądanie PHP we własnym procesie, podczas gdy Apache może uruchomić wątki. Problem bezpieczeństwa wątków PHP uniemożliwia korzystanie z niegomod_php
, który uruchamia PHP w procesie Apache.Klasycznym rozwiązaniem do uruchamiania niebezpiecznych rozszerzeń podczas obsługi dużej liczby (> 100) równoczesnych połączeń jest uruchomienie PHP na fastCGI (mod_fcgid, natywny moduł apache) i dynamiczne żądania proxy do tego z instancji apache, która uruchamia Worker MPM.
Umożliwiłoby to skalowanie od kilkuset do> 1000 równoczesnych połączeń z niewielką ilością pamięci (4 ~ 8 GB) przy podawaniu mieszanki zawartości statycznej i dynamicznej.
Oczywiście powinieneś również zbadać front-endowe rozwiązania buforowania jako część ogólnego wdrożenia (memcached, lakier).
Alternatywnie, uaktualnij do apache 2.4 i jego macierzystego zdarzenia MPM, które obsługuje współbieżność w znacznie ulepszony sposób (wątki są odpalane po połączeniu, nie czekając na odpytanie).
źródło
Minęło około 3 lat od opublikowania pytania, ale zalecam skorzystanie z MPM pracownika zamiast wstępnego rozwidlenia, nawet jeśli używasz PHP, aby uzyskać lepszą wydajność.
Jeśli chodzi o różnice, pre-fork nie jest wątkowy, dlatego serwer forksuje proces dla każdego żądania klienta (wstępnie forks w oczekiwaniu na nowe żądania, aby rozwidlenie nie pochłaniało czasu odpowiedzi). Ponieważ żądania są przetwarzane przez serwer w osobnym procesie, zwykle powoduje to o wiele większe obciążenie Twojej pamięci i procesora. Pracownik wprowadza wielowątkowość, która jest lżejsza i ma lepsze wykorzystanie pamięci.
źródło
To jest coś szczególnego do tego, co serwujesz. Jeśli wykonujesz wiele małych połączeń statycznych, wątki byłyby lżejsze i szybsze. Jeśli tylko kilka dużych aplikacji ciągle się odradza, prefork może mieć przewagę ze względu na dojrzałość i stabilność. Dlaczego nie wystarczy ustawić to, czego potrzebujesz, przetestować jeden, wymienić moduł MPM, spróbować ponownie, zobaczyć, który z nich bardziej Ci odpowiada?
źródło
które wymagają rodzaju i rodzaju ruchu, jaki będziesz mieć. A także najpierw musisz zrozumieć główną różnicę między preforką a pracownikiem. Mam nadzieję, że poniższy artykuł pomoże Ci dowiedzieć się! http://slashroot.in/how-is-nginx-different-from-apache
źródło