Tengo un nuevo servidor para jugar y estoy mirando un lienzo en blanco. Puedo poner lo que quiera en él. Si bien me siento cómodo con Apache, sigo escuchando cómo nginx puede manejar mucho más tráfico que Apache, por factores de 10, 100, incluso más. No solo eso es "mucho más rápido".
Cuando busco artículos, puedo encontrar muchas cosas no relacionadas con Drupal. O, cuando me encuentro con un artículo relacionado con Drupal, es 1) el archivo de configuración de alguien con un intento rápido de explicar cómo configurarlo, o 2) es alguien que dice "no, no use nginx, vaya con Apache con PHP fcgid "pero nunca hay explicación de por qué.
Entonces, cuando se trata de Drupal, ¿cuál es la realidad aquí?
Como ejemplo, estoy buscando algo similar a este artículo de 2bits.com . Aquí, el autor ha echado un vistazo bastante extenso a Apache mod_php vs Apache con fcgid, sopesando los pros y los contras de cada uno, y proporcionó un estudio de caso para ilustrar el impacto en el mundo real. Hay suficiente información en este artículo para que pueda tomar una decisión informada sobre qué enfoque sería el mejor para mi situación.
Si bien ese autor compara mod_php con fcgid, estoy buscando el mismo tipo de visión global y completa de Apache vs Nginx.
¿Alguien cambió a Nginx y quedó "impresionado" por la diferencia que hizo en comparación con Apache? Incluso para entornos altamente optimizados que ya están utilizando APC, Memcache y el almacenamiento en caché agresivo como Varnish, cuando la única variable que cambia es reemplazar Apache con Nginx, hace una gran diferencia en sí misma para merecer la inversión en esta tecnología alternativa más nueva. ?
El sitio que irá en este servidor obtiene un promedio de 2 millones de PV al mes. LAMP stack ejecuta Cent OS 6. CPU de 4 núcleos con 8 GIGS de ram. Memcached y APC serán parte de la mezcla. La instalación de Drupal no tiene nada de especial: básicamente Vanilla 7 con aproximadamente 50 módulos.
fuente
Respuestas:
Hablando estrictamente, esto no responde la pregunta que está haciendo. Espero que sea útil de todos modos.
Apache / Nginx / Lighttpd / otro servidor web. ¿Importa cuál elijo? En resumen, no .
La respuesta mucho más larga:
Si , y solo si, tiene un porcentaje muy elevado de usuarios que inician sesión, en caso de que le importe el rendimiento de su servidor web. Si sus usuarios son anónimos, cualquier diferencia que pueda derivar teóricamente de la optimización en esas capas es pálida absoluta en comparación con hacer que sus recursos se puedan almacenar mejor en caché. Si sus archivos CSS tienen encabezados de caché adecuados, la UA ni siquiera los pedirá la segunda vez. Eso importa. Si puede almacenar en caché sus páginas en Varnish o en una solución de software similar, servir esa página es cuestión de hacer una búsqueda hash y luego devolver una gran cantidad de datos directamente desde la RAM. Eso importa. En ambos escenarios, el demonio HTTP nunca está involucrado, PHP no se invoca. Drupal no arranca. No se debe cargar un gran conjunto de módulos en la RAM, no se ejecutan consultas de base de datos que requieren mucho tiempo.
Cuando realiza una carga de página completa, desde un caché en frío, para un usuario conectado, en una página compleja; Están sucediendo muchas cosas. Sí, el servidor web participa en el tratamiento de la solicitud entrante, configura algunos encabezados y devuelve la respuesta. Pero el tiempo que lleva, ni siquiera es relevante en el contexto de Drupal ejecutando un arranque completo y generando su respuesta. Podría haber cientos de consultas de bases de datos en ejecución. El analizador evalúa la lógica altamente compleja en PHP. Se están cargando muchos módulos en la RAM. Mejorar el rendimiento de cualquiera de esas cosas es mucho más probable que contribuya seriamente al rendimiento.
En aras de la discusión: digamos que ha pasado mucho tiempo optimizando todo lo demás.
Si tiene una gran cantidad de usuarios conectados, y ya se ocupó de todo lo anterior, entonces probablemente pueda hacer una diferencia, pero ajustar el rendimiento o reemplazar su servidor web. Sin embargo, adivina qué. Su sitio es tan complejo y los patrones de uso de sus usuarios particulares son únicos . No hay una respuesta genérica. Deberá configurar todos los servidores web diferentes detrás de un equilibrador de carga y ver cómo se comportan, según su situación .
Lo anterior fue un intento de llegar lógicamente a la conclusión de que pasar tiempo optimizando el rendimiento del servidor web probablemente sea un mal uso del tiempo. Sin embargo, me encantaría que alguien hiciera agujeros en lo anterior, probablemente aprendería algo nuevo de eso. :)
Algunas otras notas:
$ wc -l $(find . -type f | grep -v "^\.git" | grep -v "^\.hphp/third_party") | sort -nr | head -n1
y descubrí que constaba de 1.512.481 líneas de código. Esa es una cantidad de trabajo absolutamente increíble para mejorar la velocidad de PHP. Supongo que es porque la velocidad de PHP les importa mucho.fuente
De acuerdo, aunque esta pregunta ya está respondida, estoy necromando una vez más, principalmente porque no me gustan las implicaciones de estas respuestas que no hacen la diferencia, y porque como desarrollador web, odio el almacenamiento en caché con pasión .
La diferencia entre Apache y nginx no es tanto "cuán rápido pueden atender una solicitud" sino cuántas solicitudes pueden atender en la misma cantidad de hardware (especialmente con recursos limitados), que es algo algo diferente.
Apache es un servidor basado en procesos. Lo que significa que bifurca un proceso para cada solicitud. Nginx es un servidor basado en eventos, lo que significa que utiliza un bucle de eventos (asíncrono) en lugar de procesos o subprocesos.
Y aunque un servidor basado en procesos (como Apache) puede funcionar más o menos a la par con un servidor asíncrono basado en eventos (como nginx) bajo cargas ligeras, bajo cargas más pesadas como, por ejemplo, 10'0000 solicitudes simultáneas, nginx usa solo unas pocas megabytes de RAM, mientras que Apache requiere varios cientos de megabytes solo para el servidor web (sin incluir la aplicación web, que necesita muchos más recursos), si es que puede hacerlo.
Entonces, bajo cargas más pesadas, verá que Apache consume demasiada RAM, lo que, como era de esperar, degrada significativamente el rendimiento.
Más significativamente, un mayor consumo de RAM significa que Apache puede atender menos solicitudes en el mismo hardware que nginx, lo que significa que Apache requiere más hardware para la misma cantidad de usuarios, lo que significa que tiene un TCO más alto (costo total de propiedad) con Apache que con nginx, lo que reduce su ROI (retorno de la inversión).
Memoria total utilizada por X conexiones concurrentes (menos es mejor)
Solicitudes que se pueden atender por segundo en X conexiones concurrentes en 1 conjunto de hardware (más es mejor)
Fuente: ApacheBench, por dreamhost.com
Ver también este escrito digital del océano .
Aparentemente, depende de la Arquitectura de manejo de conexión que elija para Apache.
fuente
Me cambio de Apache a Nginx / PHP-FPM hace unos meses.
Hice un benchmarck con un sitio web de drupal y probé varios casos de uso. En un servidor VPS con 1 CPU y 512 Mo RAM
Drupal con solo caché
Nginx
apache
Drupal con caché y boost
Nginx
apache
punto de referencia para el usuario autenticado (carga de página)
Nginx
apache
Pero el poder de Nginx es el sistema de caché
Drupal sin Boost y Nginx con el sistema de caché habilitado
Debe usar la configuración de perusio Nginx para Drupal
fuente
Aquí hay una prueba de rendimiento para diez servidores web / variantes (por ejemplo, Apache, Nginx, lighttpd, Lightspeed, Hiawatha, Cherokee). Tres de las pruebas se relacionan con Drupal.
Estoy pensando que Hiawatha puede ser la mejor opción en general. Se supone que tiene compatibilidad total con Drupal , hace hincapié en la seguridad (DoS, XSS, CSRF, prevención de inyección de SQL) y velocidades y huellas similares a las de Nginx.
En dos de las tres pruebas de Drupal, tanto Hiawatha como Nginx superan a Apache en aproximadamente un 150%, pero en la prueba estática de Drupal, Apache supera marginalmente a Nginx, mientras que Hiawatha supera al paquete en aproximadamente un 10%.
No quisiera dejar de pensar en ninguna de estas pruebas, pero le da a uno una visión general del rendimiento en diferentes situaciones de uso. Creo que el rendimiento solo no debería ser la única consideración. La estabilidad y la seguridad pueden ser los factores más importantes.
fuente
Aquí hay un resultado de prueba de carga para drupal que se ejecuta en el mismo hardware pero con diferentes servidores web. (nginx y apache)
Aquí está la conclusión de esta prueba:
fuente