Che cos'è esattamente un modello di server Web pre-fork?


94

Voglio sapere cosa significa esattamente quando un server Web si descrive come un server Web pre-fork. Ho alcuni esempi come unicorno per rubino e gunicorno per pitone.

Più specificamente, queste sono le domande:

  • Quale problema risolve questo modello?
  • Cosa succede quando viene avviato inizialmente un server Web pre-fork?
  • Come gestisce la richiesta?

Inoltre, una domanda più specifica per unicorno / gunicorno:

Diciamo che ho una webapp che voglio eseguire con (g) unicorn. All'inizializzazione, la webapp eseguirà alcune operazioni di inizializzazione (ad esempio, inserirà voci di database aggiuntive). Se configuro (g) unicorn con più worker, le cose di inizializzazione verranno eseguite più volte?

Risposte:


102

Pre-fork in pratica significa che un master crea fork che gestiscono ogni richiesta. Un fork è un processo * nix completamente separato.

Aggiorna come da commenti qui sotto. La prein pre-forkmezzi che questi processi sono biforcuta prima arriva una richiesta. Possono però di solito aumentare o diminuire il carico va su e giù.

Il pre-fork può essere utilizzato quando si dispone di librerie NON thread-safe. Significa anche che i problemi all'interno di una richiesta che causano problemi influenzeranno solo il processo da cui vengono elaborati e non l'intero server.

L'inizializzazione in esecuzione più volte dipende da cosa si sta distribuendo. Di solito, tuttavia, per ogni processo esisterebbero pool di connessioni e cose del genere.

In un modello di threading, il master creerebbe anche thread più leggeri per inviare le richieste. Ma se un thread causa problemi enormi, potrebbe avere ripercussioni sul processo master.

Con strumenti come Nginx, Event MPM di Apache 2.4 o gevent (che può essere utilizzato con Gunicorn) questi sono asincroni, il che significa che un processo può gestire centinaia di richieste senza essere bloccato.


28
Avevo lo stesso dubbio sul significato di "prefork". Immaginavo che significasse biforcarsi di qualche tipo, naturalmente, ma la parte "pre" mi confondeva. Ho trovato qui abbreviations.com/prefork che la parte "pre" in realtà significa che i processi di lavoro vengono creati in anticipo, in modo che il tempo non venga sprecato biforcando solo quando è necessario un lavoratore. Ha molto senso per me :)
El Ninja Trepador

1
//, @ElNinjaTrepador, perché non aggiungere una risposta separata? Questo era molto più comprensibile per me, almeno, e potrebbe aiutare di più gli altri se quel commento avesse un posto più prominente.
Nathan Basanese

2
Ho aggiornato la risposta per aggiungere qualche informazione in più sul pre in pre-fork. @ElNinjaTrepador grazie per averlo sottolineato non mi ero reso conto che non fosse ben noto.
Joe Doherty

1
@NathanBasanese farà il signore;)
El Ninja Trepador

4
@ JoeDoherty forse è ben noto, solo che non lo sapevo fino a quel momento: DI avrebbe aggiunto un'altra risposta (come da richiesta di Nathan), ma dal momento che hai aggiunto quello che ho detto alla tua non è più necessario: )
El Ninja Trepador
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.