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.