Comparatif Nginx + php-fpm VS Varnish + apache + mod_pagespeed

Salut Internaute!

J'espère que tu aimes la technique, parce que là, on fonce droit dessus!  ;-)

J'utilise personnellement la configuration qui suit sur mes hébergements Wordpress : Nginx + php-fpm avec l'extension Wordpress W3 Total Cache. Ca tourne très bien, pas de problème majeur, si ce n'est la difficulté à trouver des versions correspondantes dans les dépots officiels Debian.

Google a publié son module pour Apache: mod_pagespeed qui se charge de compresser le contenu, les images et les JS pour vous. Magique, et gratuit! Mais ça implique d'utiliser Apache comme serveur Web, ce qui n'est pas mon cas comme expliqué plus haut ;-). Alors, que choisir? J'avais choisi Nginx pour pouvoir l'utiliser en reverse proxy avec W3 Total Cache qui me générait des pages HTML statique dans un dossier particulier et que je pouvais donc resservir sans même à soliciter PHP, ni MySQL : Royal.
Mais, depuis je me suis amusé avec Varnish, qui finalement propose de faire totalement le boulot de reverse proxy sans forcément avoir W3 Total Cache d'installé. Qui est le plus fort?

Bigre, mais Pierre? Que faire? Faisons un bench!!!

Nginx + php-fpm + W3 Total Cache

La configuration testée est donc la suivante:

  • Nginx 0.6.32 (dépot officiel Debian Lenny)
  • Wordpress 3.0.1 installé avec seulement W3 Total Cache comme extension d'installée et activée
  • le thème par défaut de Wordpress 3 avec 10 posts en home, contenant tous une série d'images.
  • php-fpm 5.3.3 (dépot dotdeb)
  • Le tout est installé sur une Dedibox V3 avec Debian Lenny.

Tous les tests sont lancés depuis une machine virtuelle hébergée chez Gandi avec 5 Mbits de Bande passante burstable à 10 Mbits avec l'outil Apache Bench (dispo dans le paquet apache2-utils des dépots officiels Debian) avec la commande suivante: ab -n 10000 -c 100 http://test.delacelle.com/ . Soit 10 000 requètes sur la home avec 100 requètes concurentes.

Voici donc les résultats d'Apache Bench pour notre ami Nginx: (j'utilise des images pour conserver la mise en forme de Apache Bench même si c'est pas très optimal ;) )

Le serveur testé est monté jusqu'à 0,53 de charge lors de ce bench...

Et maintenant, testons avec le même site Internet, la même page, la même machine, servit par :

Varnish + Apache + mod_pagespeed + W3 Total Cache

Le serveur testé est monté à 0,04 de charge pendant ce test, par contre, au bout de 4 ou 5 salves de 10 000 requêtes, la charge processeur fait brutallement un pic (à 3,5 de charge environ) , mais redescend tout aussi sec. Je pense qu'il s'agit d'un flush du fichier binaire de Varnish (qui lui sert à stocker les infos cachées), mais je n'en suis pas certain, vu que je découvre encore.

Que peux-t-on en conclure?

Et bien, en s'attachant aux chiffres simplement, je trouve que les résultats sont très similaires. Donc en terme de performances pures côté client, l'un et l'autre sont de bonnes solutions.
Il faut noter que je connais plutôt bien Nginx, et qui est donc aux petits oignons sur cette configuration, alors que Varnish a très légèrement été configuré (passage du fichier de cache à 512Mo et configuration en VCL pour Wordpress via la Documentation Varnish ).
La configuration avec Nginx a le gros inconvénient de reposer sur php-fpm, qui bien qu'intégré dans le trunk de PHP depuis 5.3.3, n'est pas présent sur les dépots officiels Debian et je rencontre régulièrement quelques problèmes avec des extensions comme APC. Le deuxième inconvénient du fonctionnement avec Nginx, est la ré-écriture complète des rêgles htaccess pour Nginx suivant l'outil que vous utilisez derrière, ce qui n'est pas forcément simple.
Enfin, Nginx est un serveur HTTP qui peut être utilisé comme reverse-proxy,

Donc personnellement, je pencherais plus sur le couple Varnish + Apache pour plusieurs raisons:

  • Utilisation de paquets officiels Debian (au lieu de versions compilées, ou piochées ici et là)
  • On conserve le règles htaccess du CMS utilisé (ici Wordpress)
  • Possibilité d'utiliser de l'ESI (Edge Side Inlude) (si des portions de pages doivent rester statiques)
  • Pas de dépendances avec un plugin Wordpress

Et toi, Internaute, un avis éclairé sur le sujet? un interprétation de ces données?

Allez, salut!