My Opera is closing 1st of March

Croquemichette

Un blog qui veut dire tellement de choses...

Quel serveur HTTP utiliser ?

, , , , , , ,

Cela fait maintenant quelques semaines que j'ai commencé à développer une application Web me permettant de gérer mes comptes personnels. J'utilisais déjà une application personnelle pour faire cela, mais elle commençait à dater un peu.

Bref, pour cette application, j'ai décidé d'utiliser des grands classiques : MySQL, PHP5, Javascript, HTML, CSS.
Du côté du back, on ne retrouve que des entrées API (une quinzaine) qui renvoient principalement du Json (à 80%), et des formulaires HTML (pré-remplis ou vides).
Du côté du front, on retrouve un système similaire à celui de Dojo, c'est-à-dire qu'on y retrouve des sortes de widgets, avec un système évènementiel très présent. Toutefois, tout est fait avec JQuery et Prototype.

Le Json contient des données récupérées de la base de données. La taille des fichiers renvoyés tournent entre 50 octets et 15 ko.

Au final, il ne manquait qu'une chose : le serveur HTTP. Au départ, pour faire simple, je suis parti sur un le couple Apache (prefork) et son module PHP5.
Puis, j'ai décidé d'installer nginx, que j'avais déjà testé pour réaliser des bancs d'essais sur des fichiers statiques. Ici, il marcherait avec PHP5-FPM.

Une fois le tout installé, j'ai décidé de réaliser quelques bancs d'essais. Puis, j'ai installé APC pour compléter mes tests.

Pour réaliser ces tests, j'ai utilisé ab (qui se trouve dans le paquet apache2-utils). Le nombre de requêtes par entrée API était de 10000, avec une concurrence à 20.

Voici les temps de réponse de chacune des entrées API, pour chacun des serveurs (les scores les plus bas sont les meilleurs) :


On peut voir que dix entrées API ont été testées. Quelle que soit l'entrée API, nginx avec APC arrive toujours en tête. Vient ensuite Apache avec APC. On les retrouve ensuite dans le même ordre sans APC.

Voici un autre graphique, qui montre plus nettement que le couple nginx/APC fait un tabac :


Voici maintenant un graphique présentant les temps de réponse moyens (les scores les plus bas sont les meilleurs) :


Et enfin, le nombre de requêtes par seconde, pour chacune des entrées API, par serveur (les scores les plus élevés sont les meilleurs) :


Il faudrait nuancer ces résultats en complétant au moins ces tests avec apache (worker), et pourquoi pas lighttpd et cherokee.

Mais une chose est sûre, APC permet d'améliorer grandement les performances (de 33% à 106% de mieux avec nginx, et de 35% à 88% de mieux avec apache).

The end of a story...Première utilisation de l'API d'Opera Link

Comments

QuHno Tuesday, October 26, 2010 5:41:41 AM

Nice test.

It would be interesting to see how APC performs against other accelerators like XCache and eAccelerator. Especially the later seems to be quite effective too and seems to use about 15-20% less memory on average, but memory usage is not as constant as in APC:
On the first run it needs a little bit more but on subsequent runs it is less, but that might depend on what you compress. If you put more weight on OO code than on procedural, APC seems to be the way to go - but your mileage may vary smile

PHcphr666 Tuesday, October 26, 2010 6:47:04 AM

Yes, you're right, I should test those.
Regarding the memory, I didn't monitor it, and I don't know how I can do that. Maybe get the pid of the process, and get the status in /proc/<pid>/status every 5 mn.

I updated the post. I added a few things.

Write a comment

New comments have been disabled for this post.