Beneficios de rendimiento del uso de NGINX

16

Considerando el uso de NGINX para servir a magento, no me preocupan los detalles de implementación, pero quiero saber si alguien tiene cosas buenas (o malas) que decir al respecto. También de particular interés es usar NGINX para cargar el equilibrio de magento.

Jonathan Bownds
fuente
Tenemos 2 tiendas que se ejecutan en un servidor dedicado con NginX. Para las tiendas de alto tráfico, sin duda hay un beneficio ya que NginX solo maneja mejor las solicitudes y deja más recursos para Magento. Para tiendas con poco tráfico, no estoy seguro de que haya algún beneficio
Sander Mangel

Respuestas:

15

Nginx es definitivamente una buena opción para alojar Magento, y viene con una serie de beneficios agradables (pero pequeños) que pueden ayudar a mejorar el rendimiento del sitio.

La principal diferencia entre Nginx y Apache es que Nginx usa Evento IO sin bloqueo, y Apache solo usa multiprocesamiento / procesamiento. ¿Cuál es la diferencia y por qué es importante? Bueno, en el caso de Apache, digamos que tiene 5 hilos, puede manejar 5 solicitudes de algo en un momento dado. Si uno de esos subprocesos tarda mucho en finalizar, solo quedan 4 subprocesos para manejar cualquier solicitud entrante adicional. Si los 5 subprocesos se bloquean, no se pueden manejar las solicitudes entrantes hasta que finalice una.

Con Evented IO cuando un hilo recibe una solicitud de algo, dispara un evento y pasa directamente a la siguiente solicitud. Cuando el evento devuelve la llamada, luego pasa la respuesta al cliente relevante.

Esto es más o menos similar a cómo funciona JavaScript asíncrono. Usted dispara una solicitud AJAX y continúa hasta que reciba una devolución de llamada.

Este enfoque moderno es muy adecuado para servir muchos archivos estáticos pequeños sin la sobrecarga de generar muchos subprocesos o procesos del sistema de trabajo.

El otro beneficio de Nginx es su huella de memoria baja. Apache admite MUCHAS cosas, y al hacerlo tiene una gran memoria y huella computacional. Puede reducirlo, pero Nginx está diseñado desde cero para ser delgado en términos de memoria.

Las diferencias no son enormes, pero a medida que escala a miles de solicitudes, esas pequeñas diferencias, en conjunto, marcan una gran diferencia.

Ahora es importante recordar que el mayor cuello de botella de rendimiento en una aplicación Magento es la ejecución de código PHP. Aquí hay una diferencia básicamente insignificante en el rendimiento entre Apache y Nginx. Lo importante es usar PHP-FPM, y el trabajador MPM con Apache (y definitivamente evitar prefork / mod-php). La razón principal es que solo invoca un intérprete PHP cuando necesita ejecutar código PHP, y puede usar un software de almacenamiento en caché de código operativo como APC de manera efectiva (y este es el mayor impulso de rendimiento que obtendrá).

Último punto a destacar: algunos módulos / aplicaciones esperan que se use Apache y la documentación puede estar orientada al uso de ModRewrite o al uso de archivos .htaccess. Si bien hay soporte de estilo ModRewrite en Nginx, no hay soporte para soluciones de estilo .htaccess por directorio.

Personalmente, me gusta Nginx porque sirve contenido estático de manera eficiente, es muy fácil configurar PHP-FPM y me gusta bastante su sintaxis de configuración. No es una solución mágica para los problemas de rendimiento, pero es una opción robusta y flexible a tener en cuenta.

Aaron Bonner
fuente
1
Una gran respuesta respaldada por los hallazgos de Magento, Inc.: magentocommerce.com/whitepaper
puntos de referencia
Sí, está de acuerdo con Aaron al 100%. Nosotros también usamos Nginx para la mayoría de nuestras implementaciones de Magento debido a su capacidad de servidor de contenido estático más rápido y manejar un mayor número de solicitudes concurrentes en comparación con Apache. El único inconveniente que hemos encontrado con Nginx es en uno de nuestros proyectos, arrojando aleatoriamente un error de tiempo de espera de la puerta de enlace 504 (incluso cuando las cargas del servidor son bastante bajas). Todavía tenemos que concretar este ... la mayoría de las soluciones descritas en varios foros no han ayudado mucho.
Vinci Rufus
1

Diría que el beneficio de rendimiento de Nginx cuando se usa Magento es despreciable. La ventaja de IO basada en eventos mencionada por Aaron también se aplica a Apache (cuando se usa el evento MPM).

Hablando de Magento en general, la mayoría del procesamiento (99%) tiene lugar en PHP y en la base de datos, por lo que optimizar el primer 1% le dará relativamente pocos beneficios.

Sin embargo, hay otras razones para elegir Nginx para Magento, como una huella de memoria más pequeña, un mejor límite de velocidad y soporte SPDY, por nombrar algunos.

Nginx tiene una gran desventaja al convertir sitios Magento existentes que se ejecutan en Apache, ya que muchas declaraciones .htaccess no se asignan directamente a las declaraciones Nginx. Por ejemplo, Nginx no admite nombres de host en ACL.

Willem
fuente