¿Qué es exactamente un modelo de servidor web previo a la bifurcación?

94

Quiero saber qué significa exactamente cuando un servidor web se describe a sí mismo como un servidor web previo a la bifurcación. Tengo algunos ejemplos, como unicornio para rubí y gunicornio para pitón.

Más específicamente, estas son las preguntas:

  • ¿Qué problema resuelve este modelo?
  • ¿Qué sucede cuando se inicia inicialmente un servidor web previo a la bifurcación?
  • ¿Cómo maneja la solicitud?

Además, una pregunta más específica para unicornio / gunicornio:

Digamos que tengo una aplicación web que quiero ejecutar con (g) unicorn. En la inicialización, la aplicación web hará algunas cosas de inicialización (por ejemplo, completará entradas adicionales de la base de datos). Si configuro (g) unicornio con varios trabajadores, ¿se ejecutarán las cosas de inicialización varias veces?

Hery
fuente

Respuestas:

102

Bifurcación previa básicamente significa que un maestro crea bifurcaciones que manejan cada solicitud. Una bifurcación es un proceso * nix completamente separado.

Actualice según los comentarios a continuación. El preen pre-forkmedios que estos procesos se bifurcan antes llega una solicitud. Pueden sin embargo por lo general pueden aumentar o disminuir según la carga sube y baja.

La bifurcación previa se puede usar cuando tiene bibliotecas que NO son seguras para subprocesos. También significa que los problemas dentro de una solicitud que causan problemas solo afectarán el proceso por el que son procesados ​​y no todo el servidor.

La inicialización que se ejecuta varias veces depende de lo que esté implementando. Por lo general, sin embargo, existen grupos de conexiones y cosas de esa naturaleza para cada proceso.

En un modelo de subprocesos, el maestro crearía subprocesos de menor peso para enviar solicitudes también. Pero si un hilo causa problemas masivos, podría tener repercusiones en el proceso maestro.

Con herramientas como Nginx, Event MPM de Apache 2.4 o gevent (que se puede usar con Gunicorn), son asincrónicas, lo que significa que un proceso puede manejar cientos de solicitudes sin bloquear.

Joe Doherty
fuente
29
Tenía la misma duda sobre el significado de "prefork". Supuse que significaba algún tipo de bifurcación, naturalmente, pero la parte "pre" me estaba confundiendo. Encontré aquí abbreviations.com/prefork que la parte "pre" en realidad significa que los procesos de trabajo se crean con anticipación, por lo que no se pierde tiempo bifurcando solo cuando se necesita un trabajador. Tiene mucho sentido para mí :)
El Ninja Trepador
1
//, @ElNinjaTrepador, ¿por qué no agregar una respuesta separada? Eso fue mucho más inteligible para mí, al menos, y puede ayudar más a otros si ese comentario ocupa un lugar más destacado.
Nathan Basanese
2
Actualicé la respuesta para agregar un poco más de información sobre el pre en el pre-fork. @ElNinjaTrepador gracias por señalar esto No me di cuenta de que no era muy conocido.
Joe Doherty
1
@NathanBasanese lo hará señor;)
El Ninja Trepador
4
@JoeDoherty tal vez sea bien conocido, simplemente no lo sabía hasta ese momento: DI iba a agregar otra respuesta (según la solicitud de Nathan), pero como agregaste lo que dije al tuyo, ya no es necesario: )
El Ninja Trepador