Avantages de performance de l'utilisation de NGINX

16

Envisager d'utiliser NGINX pour servir magento- Je ne suis pas préoccupé par les détails d'implémentation, mais je veux savoir si quelqu'un a de bonnes (ou de mauvaises) choses à dire à ce sujet. Il est également particulièrement intéressant d'utiliser NGINX pour charger l'équilibre magento.

Jonathan Bownds
la source
nous avons 2 boutiques fonctionnant sur un serveur dédié avec NginX. Pour les magasins à fort trafic, il y a certainement un avantage car NginX gère simplement les demandes mieux et laisse plus de ressources pour Magento. Pour les magasins à faible trafic, je ne suis pas sûr qu'il y ait un avantage
Sander Mangel

Réponses:

15

Nginx est certainement un bon choix pour l'hébergement de Magento, et il présente un certain nombre d'avantages (mais petits) intéressants qui peuvent aider à améliorer les performances du site.

La principale différence entre Nginx et Apache est que Nginx utilise des E / S événementielles non bloquantes, et Apache utilise uniquement le multithreading / traitement. Quelle est la différence et pourquoi est-ce important? Eh bien dans le cas d'Apache, disons qu'il a 5 threads, il peut gérer 5 demandes pour quelque chose à tout moment. Si l'un de ces threads prend du temps à se terminer, il ne reste que 4 threads pour gérer les demandes entrantes supplémentaires. Si les 5 threads sont verrouillés, aucune demande entrante ne peut être traitée avant la fin d'une.

Avec Evented IO lorsqu'un thread reçoit une demande pour quelque chose, il déclenche un événement et passe directement à la demande suivante. Lorsque l'événement rappelle, il transmet ensuite la réponse au client concerné.

Ceci est à peu près similaire au fonctionnement du javascript asynchrone. Vous lancez une demande AJAX et continuez jusqu'à ce que vous obteniez un rappel.

Cette approche moderne est bien adaptée pour desservir de nombreux petits fichiers statiques sans avoir à générer de nombreux threads ou processus système de travail.

L'autre avantage de Nginx est sa faible empreinte mémoire. Apache prend en charge BEAUCOUP de choses et, ce faisant, a une mémoire élevée et une empreinte de calcul élevée. Vous pouvez le réduire, mais Nginx est conçu à partir de zéro pour être maigre en termes de mémoire.

Les différences ne sont pas énormes, mais lorsque vous augmentez la taille de plusieurs milliers de demandes, ces petites différences, dans l'ensemble, font une grande différence.

Maintenant, il est important de se rappeler que le plus gros goulot d'étranglement des performances dans une application Magento est l'exécution de code PHP. Ici, il existe une différence de performances fondamentalement négligeable entre Apache et Nginx. L'important est d'utiliser PHP-FPM et le MPM de travail avec Apache (et certainement éviter prefork / mod-php). La raison principale est que vous n'appelez un interpréteur PHP que lorsque vous avez besoin d'exécuter du code PHP, et vous pouvez utiliser efficacement un logiciel de mise en cache de code op comme APC (et c'est le plus gros coup de pouce que vous obtiendrez).

Dernier point à souligner: certains modules / applications s'attendent à ce qu'Apache soit utilisé et la documentation peut être adaptée à l'utilisation de ModRewrite ou à l'utilisation de fichiers .htaccess. Bien qu'il existe un support de style ModRewrite dans Nginx, il n'y a pas de support pour les solutions de style .htaccess par répertoire.

Personnellement, j'aime Nginx car il sert efficacement du contenu statique, il est très facile de configurer PHP-FPM et j'aime beaucoup sa syntaxe de configuration. Ce n'est pas une solution miracle aux problèmes de performances, mais c'est une option flexible robuste à considérer.

Aaron Bonner
la source
1
Une excellente réponse qui est soutenue par les conclusions de Magento, Inc.: magentocommerce.com/whitepaper
benmarks
Oui, d'accord avec Aaron à 100%, nous utilisons également Nginx pour la plupart de nos déploiements Magento en raison de sa capacité à serveur de contenu statique plus rapidement et à gérer un nombre plus élevé de demandes simultanées par rapport à Apache. Le seul inconvénient que nous avons rencontré avec Nginx est sur l'un de nos projets, il génère de manière aléatoire une erreur de temporisation de la passerelle 504 (même lorsque les charges du serveur sont assez faibles). Nous n'avons pas encore cloué celui-ci .. la plupart des solutions décrites dans divers forums n'ont pas beaucoup aidé.
Vinci Rufus
1

Je dirais que les performances de Nginx lors de l'utilisation de Magento sont négligeables. L'avantage d'E / S basé sur les événements mentionné par Aaron s'applique également à Apache (lors de l'utilisation de l'événement MPM).

En parlant de Magento en général, la plupart des traitements (99%) ont lieu en PHP et dans la base de données, donc l'optimisation du premier 1% vous apportera relativement peu d'avantages.

Cependant, il existe d'autres raisons de choisir Nginx pour Magento, comme une empreinte mémoire plus petite, une meilleure limite de débit et une prise en charge SPDY, pour n'en nommer que quelques-uns.

Il y a un gros inconvénient à Nginx lors de la conversion de sites Magento existants fonctionnant sur Apache, car de nombreuses instructions .htaccess ne sont pas directement mappées sur des instructions Nginx. Par exemple, Nginx ne prend pas en charge les noms d'hôte dans les ACL.

Willem
la source