¿Por qué es Nginx tan rápido?

31

¿Cómo un sitio como rambler sirve contenido dinámico tan rápido? Incluso más rápido que Yahoo (que tiene un servidor en mi país: SE Asia; rambler no).

¿Es esto puramente la capacidad de Nginx? ¿Dónde debería estar buscando para aprender sobre tales capacidades?

Prácticamente un novato aquí, creo que serverfault.com si se sirve desde Nginx será mucho más rápido que el IIS 7 (suponiendo que el tiempo de acceso db sea el mismo en ambos casos). ¿Es esta una suposición justa?

Editar:

Publicación de Karl usando Nginx frente a IIS7

Quintin Par
fuente
Tenga en cuenta que serverfault.com ya usa Nginx (según Wappalyzer ). : P
WillS

Respuestas:

26

Puede ver esta presentación para obtener una descripción general de los componentes internos de nginx. La principal diferencia es el manejo asíncrono de solicitudes en lugar de usar hilos como lo hace Apache. Puede echar un vistazo a esta documentación también.

Maxwell
fuente
2
Buena respuesta en cuanto a la arquitectura de nginx y el problema C10K. Sin embargo, entiendo que la pregunta de los OP se refiere a la velocidad percibida de carga de la página, que tiene poco que ver con nginx.
Jesper M
¿Qué significa realmente "asíncrono"? Siempre he estado pensando que significa ejecutado en un hilo separado.
Ivan
Asíncrono significa que Nginx actúa siempre como un proxy, incluso con Php: Nginx recibe la solicitud HTTP, la envía al servidor Php PERO no se bloquea / espera para enviar la respuesta HTTP. Es por eso que ve una diferencia (velocidad, CPU / RAM) para el sitio web de alto tráfico. Pero no hay aumento de rendimiento para algunas solicitudes (que conciernen al 95% de Internet ...), pero Nginx es genial ;-)
Thomas Decaux
21

¿Cómo un sitio como rambler sirve contenido dinámico tan rápido? ... ¿Es esto puramente la capacidad de Nginx? ¿Dónde debería estar buscando para aprender sobre tales capacidades?

Esto tiene poco o nada que ver con el servidor web utilizado: tanto nginx, IIS y Apache son 'lo suficientemente rápidos' y generalmente hacen su trabajo en milisegundos. nginx es mucho más rápido que Apache, pero esto simplemente significa que el propietario del sitio necesitará menos servidores para la parte de servicio web: nginx no le transfiere datos más rápido.

La parte menos importante es la velocidad del lado del servidor , es decir, el tiempo que lleva crear el HTML. La parte más importante es el rendimiento 'frontend' , con lo que me refiero al HTML, CSS, Javascript e imágenes, el número de estos, el tamaño de estos y la entrega adecuada (compresión HTTP, almacenamiento en caché) de estos.

Por supuesto, la velocidad del lado del servidor sigue siendo importante, no estoy diciendo que deba ignorarse o que no importa. Pero generalmente es la parte más pequeña percibida de la velocidad del usuario final: el trabajo en el servidor a menudo se realiza en menos de 500 milisegundos, pero la página no está lista antes de que pasen entre 3,000 y 5,000 milisegundos. La mayor parte de este tiempo se destina a descargar los recursos frontend (CSS, Javascript, imágenes).

Steve Souders hizo el trabajo original mientras estaba en Yahoo, ahora está trabajando en Google. Su primer libro "Sitios web de alto rendimiento" es el mejor punto de partida para aprender más sobre cómo crear sitios web rápidos. El mismo material que está en su libro se puede encontrar en esta video charla y estas reglas de diseño . Sin embargo, creo que el libro es rápido de leer y mucho más fácil de entender.

Puede ejecutar los sitios a través del probador de WebPageTest.org, lo que le dará una buena idea de la parte frontal de estos sitios y por qué son más rápidos o más lentos.

Creo que serverfault.com si se sirve desde Nginx será mucho más rápido que el IIS 7 (suponiendo que el tiempo de acceso db sea el mismo en ambos casos). ¿Es esta una suposición justa?

No, eso es un malentendido. :-)

Jesper M
fuente
18

Nginx se usa con mayor frecuencia para equilibrar la carga de otras aplicaciones / servidores y servir contenido estático que el servidor completo.

Por ejemplo, puede escribir una aplicación usando uno de los muchos frameworks de Python, y hacer que nginx sea el front-end de muchas instancias de eso (tal vez distribuido en varias máquinas). En este caso, los servidores nginx tienen dos propósitos: maneja las solicitudes de contenido estático como imágenes y hojas de estilo directamente (y debido a su diseño lo hace muy rápidamente), y pasa solicitudes dinámicas a la aplicación distribuyendo la carga entre todas las instancias que conoce . Esta es una configuración muy popular en la comunidad Ruby on Rails también.

Hay otras dos posibles razones por las cuales Rambler puede aparecer más rápido que el servicio local de Yahoo. En primer lugar, el PoP de Yahoo local podría no tener suficientes recursos disponibles para atender la cantidad de solicitudes que recibe más rápido, por lo que tal vez simplemente agregando más hardware (suponiendo que el software se escale bien de esta manera) lo aceleraría (pero, presumiblemente, la diferencia no es vale la pena el costo de mantener el kit adicional o Yahoo habría hecho esto). La otra gran diferencia puede estar en el back-end en lugar del servidor web: los dos servicios sin duda tendrán una disposición de base de datos muy diferente e incluso si no es probable que ejecuten exactamente la misma variedad de consultas (y la cantidad de el hardware dedicado a la arquitectura de la base de datos también tendrá un efecto significativo).

Analizar por qué un servicio es más rápido que otro (generalmente o en circunstancias específicas) generalmente no dará como resultado una sola respuesta simple: hay muchas maneras de diseñar una aplicación que está destinada a escalar a miles de usuarios, cada uno con su propios beneficios, problemas y compromisos, e incluso si considera todas esas diferencias, cada sitio tendrá una dinámica de base de usuario diferente, además hay problemas de red más allá del control de los diseñadores también.

David Spillett
fuente
3

Posiblemente nginx, pero una arquitectura más escalable con un equilibrio de carga razonable frente a servidores de contenido estático / generadores de contenido dinámico. si realmente desea obtener una excelente experiencia para el usuario final, probablemente debería acercar el contenido a los 'globos oculares'; use CDN.

si te interesa el tema, mira esto y aquello y ... bueno, google; -]

pQd
fuente
2

Los mejores sitios usan aceleradores de aplicaciones como los ZXTM de Zeus; en muchos casos pueden almacenar en caché las respuestas dinámicas, lo que obviamente es de gran beneficio.

Chopper3
fuente
0

Me resulta difícil ver la falla del servidor mucho más rápido (¿SO podría tener problemas de carga debido al tráfico tal vez?), Ya que es una carga de página instantánea aquí en la UE sobre mi ruta. Es mucho más rápido y más receptivo que la mayoría de los sitios de noticias locales, etc.

La mayoría de los problemas obvios con los tiempos de carga y la latencia provienen de la imo del servidor y del usuario final y no del rendimiento real del servidor (a menos que alguien haya dimensionado o diseñado algo incorrecto). Los diferentes sitios se pueden enrutar de diferentes maneras y existe una gran posibilidad de que un sitio local del país para mí tenga una latencia más grande que algo en todo el planeta; todo depende de tantas variables que no se puede decir que se pueda resolver con solo un servicio actualizar / cambiar a menos que sepa que es donde está el problema para un uso específico (r) ...

Obviamente, el almacenamiento en caché de varios tipos en el servidor hace una gran diferencia, pero todos estos sitios ya lo hacen hasta donde yo sé.

Oskar Duveborn
fuente