web-dev-qa-db-fra.com

Qu'est-ce qu'un modèle de serveur Web pré-fork?

Je veux savoir ce que cela signifie exactement quand un serveur Web se décrit comme un serveur Web pré-fork. J'ai quelques exemples tels que nicorn pour Ruby et gunicorn pour python.

Plus précisément, ce sont les questions:

  • Quel problème ce modèle résout-il?
  • Que se passe-t-il lorsqu'un serveur Web pré-fork est démarré initialement?
  • Comment gère-t-il la demande?

Aussi, une question plus spécifique pour Unicorn/gunicorn:

Disons que j'ai une webapp que je veux exécuter avec (g) Unicorn. Lors de l'initialisation, la webapp effectuera des tâches d'initialisation (par exemple, remplissez des entrées de base de données supplémentaires). Si je configure (g) Unicorn avec plusieurs travailleurs, le processus d'initialisation sera-t-il exécuté plusieurs fois?

76
Hery

La pré-fourche signifie essentiellement qu'un maître crée des fourches qui gèrent chaque demande. Un fork est un processus * nix complètement séparé.

Mettez à jour selon les commentaires ci-dessous. Le pre dans pre-fork signifie que ces processus sont bifurqués avant qu'une demande n'arrive. Ils peuvent cependant généralement être augmentés ou diminués à mesure que la charge monte et descend.

Le pré-fork peut être utilisé lorsque vous avez des bibliothèques qui ne sont PAS sécurisées pour les threads. Cela signifie également que les problèmes dans une demande causant des problèmes n'affecteront que le processus par lequel ils sont traités et non l'ensemble du serveur.

L'initialisation exécutée plusieurs fois dépend de ce que vous déployez. Habituellement, cependant, des pools de connexions et des éléments de cette nature existent pour chaque processus.

Dans un modèle de thread, le maître créerait également des threads plus légers pour envoyer les demandes. Mais si un thread provoque d'énormes problèmes, cela pourrait avoir des répercussions sur le processus maître.

Avec des outils tels que Nginx, Event MPM d'Apache 2.4 ou gevent (qui peut être utilisé avec Gunicorn), ils sont asynchrones, ce qui signifie qu'un processus peut gérer des centaines de demandes sans bloquer.

82
Joe Doherty