O que exatamente é um modelo de servidor da web pré-bifurcação?

94

Quero saber exatamente o que significa quando um servidor da web se descreve como um servidor da web de pré-bifurcação. Tenho alguns exemplos, como unicórnio para rubi e gunicórnio para python.

Mais especificamente, estas são as perguntas:

  • Que problema este modelo resolve?
  • O que acontece quando um servidor da web pré-bifurcação é iniciado pela primeira vez?
  • Como ele lida com a solicitação?

Além disso, uma pergunta mais específica para unicórnio / gunicórnio:

Digamos que eu tenha um webapp que deseja executar com (g) unicórnio. Na inicialização, o webapp fará algumas coisas de inicialização (por exemplo, preencher as entradas adicionais do banco de dados). Se eu configurar (g) unicorn com vários workers, o material de inicialização será executado várias vezes?

Hery
fonte

Respostas:

102

Pré-bifurcação significa basicamente que um mestre cria garfos que atendem a cada solicitação. Um fork é um processo * nix completamente separado.

Atualize conforme os comentários abaixo. A preem pre-forkmeios que estes processos são bifurcados antes de um pedido entra. Eles podem, contudo, geralmente ser aumentada ou diminuída como a carga vai para cima e para baixo.

Pré-bifurcação pode ser usada quando você tem bibliotecas que NÃO são seguras para thread. Isso também significa que os problemas em uma solicitação que causam problemas afetarão apenas o processo pelo qual são processados ​​e não o servidor inteiro.

A inicialização em execução várias vezes depende do que você está implantando. Normalmente, entretanto, pools de conexão e coisas dessa natureza existiriam para cada processo.

Em um modelo de threading, o mestre criaria threads mais leves para despachar solicitações também. Mas se um thread causar problemas enormes, ele pode ter repercussões no processo mestre.

Com ferramentas como o Nginx, o Event MPM do Apache 2.4 ou gevent (que pode ser usado com o Gunicorn), eles são assíncronos, o que significa que um processo pode lidar com centenas de solicitações sem bloquear.

Joe Doherty
fonte
28
Tive a mesma dúvida sobre o significado de "prefork". Suponho que significa algum tipo de bifurcação, naturalmente, mas a parte "pré" estava me confundindo. Descobri aqui abbreviations.com/prefork que a parte "pré" na verdade significa que os processos de trabalho são criados com antecedência, para que o tempo não seja desperdiçado bifurcando apenas quando um trabalhador é necessário. Faz muito sentido para mim :)
El Ninja Trepador
1
//, @ElNinjaTrepador, por que não adicionar uma resposta separada? Isso foi muito mais inteligível para mim, pelo menos, e pode ajudar mais os outros se esse comentário receber um lugar mais proeminente.
Nathan Basanese
2
Eu atualizei a resposta para adicionar um pouco mais de informações sobre o pré no pré-fork. @ElNinjaTrepador obrigado por apontar isso eu não sabia que não era muito conhecido.
Joe Doherty
1
@NathanBasanese vai servir, senhor;)
El Ninja Trepador
4
@JoeDoherty talvez seja bem conhecido, só não era conhecido por mim até aquele momento: DI ia adicionar outra resposta (a pedido de Nathan), mas como você adicionou o que eu disse à sua não é mais necessário: )
El Ninja Trepador