56 votes

Quel installer: Apache Worker ou Prefork? Quels sont les (dés-)avantages de chacun?

Basé sur les descriptions des Préempaquetage et Worker MPM, il semble que le type préempaqueté soit quelque peu dépassé, mais je ne trouve pas vraiment de comparaison appropriée des deux types.

Ce que j'aimerais savoir :

  • Quelles sont les différences entre les deux versions ?
  • Quels sont les avantages et les inconvénients de chaque type de serveur ?
  • Y a-t-il des directives de base sur le choix du type en fonction des conditions ?
  • Y a-t-il des différences de performance importantes entre les deux ?

2 votes

40voto

Ryan Sampson Points 2898

Comme le disent les docs, vous devriez utiliser le MPM prefork si vous avez besoin d'éviter le threading pour la compatibilité avec les bibliothèques non-thread-safe. Typiquement, tout module Apache non trivial (mod_php -- ou, plus précisément, la myriade d'extensions et de bibliothèques auxquelles il se lie -- étant l'exemple canonique) a une sorte de bibliothèque non-thread-safe (ou a du code non-thread-safe en lui), donc à moins que vous n'utilisiez une installation Apache assez standard, je opterais pour le MPM prefork.

3 votes

J'aurais recommandé l'ouvrier MPM, sauf si vous utilisez PHP. Worker est l'MPM recommandé par Apache, et offre de meilleures performances et moins de surcharge. C'est seulement que les développeurs PHP n'ont jamais entendu parler de la sécurité des threads que vous devez utiliser prefork.

16 votes

PHP a été thread safe depuis très longtemps. Ils ne font que suggérer l'utilisation de pré-fourcheurs car ils ne peuvent pas contrôler ce que font les autres bibliothèques. Arrêtez de blâmer PHP pour l'inaction d'autres développeurs.

3 votes

PHP peut être thread safe (bien que j'en doute) mais toutes les bibliothèques auxquelles il est lié ne le sont certainement pas. Ici, nous exécutons quelques applications PHP assez importantes et tous les quelques mois, nous essayons de passer de prefork à worker, mais nous obtenons immédiatement des données corrompues.

14voto

adaptr Points 16431

La solution classique pour exécuter des extensions non sécurisées tout en traitant un grand nombre (>100) de connexions simultanées est d'exécuter PHP sur fastCGI (mod_fcgid, un module apache natif) et de faire transiter les requêtes dynamiques par un serveur apache qui utilise le MPM Worker.

Cela vous permettrait de passer de quelques centaines à plus de 1000 connexions simultanées avec une quantité modeste de mémoire (4~8GB) lors de la fourniture de contenus statiques et dynamiques mélangés.

Vous devriez également envisager des solutions de mise en cache côté client dans le cadre de votre déploiement global (memcached, varnish).

Autrement, envisagez une mise à niveau vers Apache 2.4 et son MPM natif event, qui gère la concurrence de manière bien meilleure (les threads sont lancés dès la connexion, sans attendre d'être interrogés.)

0 votes

Pouvez-vous développer sur le commentaire de mpm de l'événement ? Comment se compare-t-il à mpm-worker ?

0 votes

While the worker MPM was already thread-based, and hence much faster to start and lighter to run, the event MPM no longer polls the socket - it gets notified on activity; therefore, "event". en français: Tandis que le MPM worker était déjà basé sur les threads, et donc beaucoup plus rapide à démarrer et plus léger à exécuter, le MPM event ne sonde plus le socket - il est notifié sur l'activité ; par conséquent, "event".

0 votes

Alors cela devrait fonctionner mieux sur les sites à fort trafic (13k/sec) ?

7voto

Mike B Points 747

Cela fait environ 3 ans depuis que la question a été publiée, mais je vous recommande d'opter pour le MPM worker au lieu de pre-fork même en utilisant PHP, pour obtenir de meilleures performances.

Quant aux différences, pre-fork n'est pas threadé, donc le serveur lance un processus pour chaque demande client (il prépare à l'avance de nouvelles demandes pour que le forking n'affecte pas le temps de réponse). Comme les demandes sont traitées dans un processus séparé, cela consomme généralement beaucoup plus de mémoire et de CPU. Le worker apporte le multi-threading qui est plus léger et a une meilleure utilisation de la mémoire.

2voto

Marcin Points 2241

Cela dépend vraiment de ce que vous servez. Si vous avez beaucoup de petites connexions statiques, les threads seront plus légers et plus rapides. Si vous avez seulement quelques grandes applications constamment lancées, le module prefork pourrait être favorable en raison de sa maturité et de sa stabilité. Pourquoi ne pas simplement mettre en place ce dont vous avez besoin, tester un, remplacer le module MPM, essayez encore une fois, et voir lequel vous convient le mieux?

0 votes

Vous ne pouvez pas arbitrairement "échanger" le MPM dans apache 2.2; il est défini au moment de la compilation.

0 votes

Vous pouvez le faire avec apt ou RPMs. Debian a plusieurs packages Apache 2 différents, selon le style que vous préférez.

1voto

sarath Points 27

Cela dépend du type et de la nature du trafic que vous aurez. Et aussi, vous devez d'abord comprendre la principale différence entre le prefork et le worker. J'espère que l'article ci-dessous vous aidera à comprendre! http://slashroot.in/how-is-nginx-different-from-apache

2 votes

Nous préférons que les réponses contiennent du contenu, pas des liens vers du contenu. Si vous pouviez fournir un résumé de ce qui se trouve sur la cible du lien, c'est la meilleure pratique. Les liens peuvent être périmés.

1 votes

La question concernait Apache (nginx n'est pas Apache) et les mérites relatifs du préchargement ou des threads (nginx n'utilise aucun des deux)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X