2014-09-14 19 views
44

Voglio sapere cosa significa esattamente quando un server web si descrive come un server web pre-fork. Ho alcuni esempi come unicorn per ruby ​​e gunicorn per python.Che cos'è esattamente un modello di server Web pre-fork?

In particolare, queste sono le domande:

  • Che problema non 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/gunicorn:

Diciamo che ho una webapp che voglio correre con (g) unicorno. All'inizializzazione, la webapp eseguirà alcune operazioni di inizializzazione (ad esempio, inserirà ulteriori voci nel database). Se configuro (g) unicorno con più worker, il materiale di inizializzazione verrà eseguito più volte?

risposta

45

Il pre-forking in pratica significa che un master crea forche che gestiscono ciascuna richiesta. Una forcella è un processo * nix completamente separato.

Aggiornamento come da commenti sotto. Lo pre in pre-fork significa che questi processi sono biforcati prima che una richiesta entri. Tuttavia possono essere aumentati o diminuiti di solito mentre il carico sale e scende.

Il pre-forking può essere utilizzato quando si dispone di librerie che non sono 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 eseguita più volte dipende da ciò che si sta distribuendo. Di solito, tuttavia, per ogni processo esisterebbero pool di connessioni e materiale di quella natura.

In un modello di filettatura, il master crea anche filettature più leggere per le richieste di spedizione. Ma se un thread causa problemi enormi potrebbe avere ripercussioni sul processo principale.

Con strumenti come Nginx, MPM di eventi di Apache 2.4 o gevent (che può essere utilizzato con Gunicorn), questi sono asincroni nel senso che un processo può gestire centinaia di richieste senza bloccarlo.

+12

Ho avuto lo stesso dubbio sul significato di "prefork". Supponevo che fosse una sorta di biforcazione, naturalmente, ma la parte "pre" mi stava confondendo. Ho trovato qui http://www.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 a forking solo quando un lavoratore è necessario. Ha molto senso per me :) –

+1

//, @ElNinjaTrepador, perché non aggiungere una risposta separata? Questo è stato molto più comprensibile per me, almeno, e potrebbe aiutare gli altri di più se quel commento diventa più importante. –

+2

Ho aggiornato la risposta per aggiungere ulteriori informazioni sul pre-forcellone. @ ElninjaTrepador, grazie per avermelo fatto notare, non mi sono reso conto che non era ben noto. –