Benchmark Magento: Apache+mod_php vs NGinx+php-fpm vs NGinx+HHVM

Estos últimos días, he estado probando la viabilidad de montar una tienda de Magento con más de 500.000 productos organizados en 925 categorías. Soy relativamente nuevo con Magento y la verdad es que, siendo sincero, a priori no le daba muchas posibilidades al experimento.

De todas formas me puse manos a la obra y después de realizar varios procesos, bastante pesados, por cierto, pude generar 11 ficheros csv con cerca de 83 parámetros y 50.000 registros para poder importarlos con Magmi.

El proceso de importación tardó aproximadamente 6 horas y la generación de índices posterior otras 4. Ya tenía el servicio listo para comenzar a medir…

El servidor que tenia montado, era un servidor virtual que tenia 2 CPUs Intel(R) Xeon(R) CPU E5-2630L 0 @ 2.00GHz y 2 GB de RAM.
Sistema Operativo: Debian 7 (Wheezy)
La versión de PHP es la 5.4
Magento estaba con la plantilla por defecto y 0 plugins.
Se ha usado Siege para realizar las mediciones con el comando “siege -c20 -t120s -f urls.txt”

Los datos de las pruebas son los siguientes:

Apache + mod_php

Transactions: 161 hits
Availability: 100.00 %
Elapsed time: 119.10 secs
Data transferred: 4.58 MB
Response time: 13.31 secs
Transaction rate: 1.35 trans/sec
Throughput: 0.04 MB/sec
Concurrency: 17.99
Successful transactions: 161
Failed transactions: 0
Longest transaction: 16.11
Shortest transaction: 8.86

NGinx + php-fpm

Transactions: 191 hits
Availability: 100.00 %
Elapsed time: 119.71 secs
Data transferred: 6.43 MB
Response time: 11.32 secs
Transaction rate: 1.60 trans/sec
Throughput: 0.05 MB/sec
Concurrency: 18.06
Successful transactions: 191
Failed transactions: 0
Longest transaction: 13.11
Shortest transaction: 1.60

NGinx + HHVM

Transactions: 411 hits
Availability: 100.00 %
Elapsed time: 119.16 secs
Data transferred: 13.17 MB
Response time: 5.17 secs
Transaction rate: 3.45 trans/sec
Throughput: 0.11 MB/sec
Concurrency: 17.84
Successful transactions: 411
Failed transactions: 0
Longest transaction: 9.47
Shortest transaction: 2.75

Después de ver la mejora que suponía HHVM hice la prueba de cambiar PHP 5.4 por PHP 5.5. El resultado, mejoraba aún más, aunque no de una forma tan relevante:

NGinx + HHVM + PHP 5.5

Transactions: 424 hits
Availability: 100.00 %
Elapsed time: 120.00 secs
Data transferred: 13.59 MB
Response time: 4.98 secs
Transaction rate: 3.53 trans/sec
Throughput: 0.11 MB/sec
Concurrency: 17.60
Successful transactions: 424
Failed transactions: 0
Longest transaction: 9,45
Shortest transaction: 2,21

Conclusiones

Como se puede observar, la mejora de rendimiento con HHVM sobre NGinx es relevante respecto a otras configuraciones que hemos probado. Tanto en hits como en tiempos estamos en una mejora ligeramente superior al 50%, lo que de por sí nos parece un dato muy reseñable.

Por último, comentar que HHVM actualmente ya es compatible con el 98% de frameworks de PHP, lo que a priori le convierte en un servicio muy a tener en cuenta a la hora de desplegar nuestras soluciones.