Czym dokładnie jest model serwera WWW typu pre-fork?

100

Chcę wiedzieć, co dokładnie oznacza, że ​​serwer WWW określa się jako serwer sieciowy typu pre-fork. Mam kilka przykładów, takich jak jednorożec dla rubinu i gunicorn dla pytona.

A dokładniej, oto pytania:

  • Jaki problem rozwiązuje ten model?
  • Co się dzieje, gdy serwer sieciowy typu pre-fork jest początkowo uruchamiany?
  • Jak obsługuje żądanie?

Bardziej szczegółowe pytanie dotyczące jednorożca / strzelby:

Powiedzmy, że mam aplikację internetową, którą chcę obsługiwać z (g) jednorożcem. Podczas inicjalizacji aplikacja internetowa wykona pewne czynności związane z inicjalizacją (np. Wypełni dodatkowe wpisy w bazie danych). Jeśli skonfiguruję (g) jednorożca z wieloma pracownikami, czy inicjalizacja będzie uruchamiana wiele razy?

Hery
źródło

Odpowiedzi:

105

Zasadniczo oznacza to, że mistrz tworzy widełki, które obsługują każde żądanie. Rozwidlenie to całkowicie oddzielny proces * nix.

Zaktualizuj zgodnie z komentarzami poniżej. preW pre-forkużyciu, że procesy te są rozwidlone zanim nadejdzie żądanie. Mogą one jednak zazwyczaj być zwiększona lub zmniejszona jako obciążenie idzie w górę iw dół.

Pre-forking może być używany, gdy masz biblioteki, które NIE są bezpieczne dla wątków. Oznacza to również, że problemy w żądaniu powodujące problemy będą miały wpływ tylko na proces, który są przetwarzane przez, a nie na cały serwer.

Inicjalizacja wykonywana wiele razy zależy od tego, co wdrażasz. Zwykle jednak dla każdego procesu istnieją pule połączeń i inne tego typu rzeczy.

W modelu wątkowym master tworzyłby wątki o mniejszej wadze również do wysyłania żądań. Ale jeśli wątek powoduje ogromne problemy, może to mieć wpływ na proces główny.

Dzięki narzędziom takim jak Nginx, Event MPM Apache 2.4 lub gevent (który może być używany z Gunicorn) są one asynchroniczne, co oznacza, że ​​proces może obsługiwać setki żądań bez blokowania.

Joe Doherty
źródło
29
Miałem takie same wątpliwości co do znaczenia słowa „prefork”. Przypuszczałem, że oznaczało to jakiś rodzaj rozwidlenia, ale część „przed” wprawiała mnie w zakłopotanie. Znalazłem tutaj abbreviations.com/prefork, że część „pre” w rzeczywistości oznacza, że ​​procesy robocze są tworzone z wyprzedzeniem, aby nie tracić czasu na rozwidlanie tylko wtedy, gdy pracownik jest potrzebny. To ma dla mnie dużo sensu :)
El Ninja Trepador
1
//, @ElNinjaTrepador, dlaczego nie dodać osobnej odpowiedzi? To było przynajmniej dla mnie o wiele bardziej zrozumiałe i może bardziej pomóc innym, jeśli ten komentarz zajmie bardziej widoczne miejsce.
Nathan Basanese,
2
Zaktualizowałem odpowiedź, aby dodać trochę więcej informacji na temat pre in pre-fork. @ElNinjaTrepador dzięki za zwrócenie uwagi Nie zdawałem sobie sprawy, że nie było to dobrze znane.
Joe Doherty
1
@NathanBasanese zrobi sir;)
El Ninja Trepador
4
@JoeDoherty może to jest dobrze znane, po prostu nie było mi znane aż do tego czasu: D zamierzałem dodać kolejną odpowiedź (zgodnie z prośbą Nathana), ale ponieważ dodałeś to, co powiedziałem, nie jest już konieczne: )
El Ninja Trepador