web-dev-qa-db-fra.com

Lequel installer: Apache Worker ou Prefork? Quels sont les (inconvénients de chacun?

Sur la base des descriptions des MPM Prefork et Worker , il semble que le type de préfork soit quelque peu dépassé, mais je ne peux pas vraiment trouver une comparaison correcte des deux types.

Ce que j'aimerais savoir:

  • Quelles sont les différences entre les deux versions?
  • Quels sont les (dés) avantages de chaque type de serveur?
  • Existe-t-il des directives de base sur le type à choisir en fonction des conditions?
  • Y a-t-il de grandes différences de performances entre les deux?
55
Aron Rotteveel

Comme le disent les docs, vous devez utiliser le MPM prefork si vous devez éviter le threading pour la compatibilité avec les bibliothèques non thread-safe. En règle générale, tout module Apache non trivial (mod_php - ou, plus précisément, la myriade d'extensions et de bibliothèques auxquelles il est lié - en étant l'exemple canonique) a une sorte de bibliothèque non thread-safe (ou contient du code non-thread-safe), donc à moins que vous n'utilisiez une jolie installation Apache, je choisirais le MPM pré-fourche.

40
womble

La solution classique pour exécuter des extensions non sécurisées tout en desservant un grand nombre (> 100) de connexions simultanées consiste à exécuter PHP sur fastCGI (mod_fcgid, un module Apache natif) et des requêtes dynamiques proxy vers celle d'un Apache instance qui exécute le Worker MPM.

Cela vous permettrait de passer de quelques centaines à> 1000 connexions simultanées avec une quantité modeste de mémoire (4 ~ 8 Go) lorsque vous servez un mélange de contenu statique et dynamique.

Bien sûr, vous devez également rechercher des solutions de mise en cache frontale dans le cadre de votre déploiement global (memcached, vernis).

Vous pouvez également mettre à niveau vers Apache 2.4 et son natif événement MPM, qui gère la concurrence de manière bien améliorée (les threads sont déclenchés lors de la connexion, sans attendre d'être interrogés.)

13
adaptr

Cela fait environ 3 ans que la question a été publiée, mais je vous recommanderais d'utiliser MPM travailleur au lieu de pré-fork, même si vous utilisez PHP, pour obtenir de meilleures performances.

En ce qui concerne les différences, le pré-fork n'est pas threadé, donc le serveur forks un processus pour chaque requête client (il pre-forks en prévision de nouvelles requêtes afin que le forking n'entame pas le temps de réponse). Étant donné que les demandes sont soumises à un serveur dans un processus distinct, cela impose généralement beaucoup plus que votre mémoire et votre processeur. L'ouvrier apporte le multi-threading qui est plus léger et a une meilleure utilisation de la mémoire.

6
aleemb

C'est quelque chose de très particulier à ce que vous servez. Si vous faites beaucoup de petites connexions statiques, les threads seraient plus légers et plus rapides. Si vous n'avez que peu de grosses applications générées en permanence, la préfork peut avoir un Edge en raison de sa maturité et de sa stabilité. Pourquoi ne pas simplement configurer ce dont vous avez besoin, en tester un, échanger le module MPM, l'essayer à nouveau, voir celui qui vous convient le mieux?

2
Marcin

qui a besoin du type et du type de trafic que vous aurez. Et aussi, vous devez d'abord comprendre la principale différence entre la pré-fourche et le travailleur. J'espère que l'article ci-dessous vous aidera à comprendre! http://slashroot.in/how-is-nginx-different-from-Apache

1
sarath