11 votos

Cuando debo cambiar a NGinx?

Tengo un servidor con varios dominios y aplicaciones que se ejecutan, a través de Apache. Todo está bien en el momento pero tengo planes para desarrollar algunos muy de rendimiento intensivo de la aplicación web (usando C++ con CPPCMS), a partir de mi servidor de pruebas, tal vez conseguir un servidor independiente solo para esta aplicación una vez que se prepara.

De cualquier manera, he oído mucho acerca de NGinx, que parece ser más eficientes que los de Apache, así que me preguntaba si valía la pena trabajar con él para el nuevo proyecto. No está claro en mi mente porque yo no sé qué tipo de cuello de botella de rendimiento NGinx corrige exactamente.

Yo no soy un Apache power user, yo soy un pobre linux admin y yo no desarrollar aplicaciones web mucho (pero tengo nociones). Estoy en su mayoría dedicado a la escritura de software para el servidor web parte es a veces muy oscuro para mí. Cada vez que tengo que configurar un sitio web a través de apach, tengo un montón de tiempo de navegación en el doc para asegurarse de que no me rompo todo.

Dicho esto, creo que me estoy haciendo mucho mejor en este lado, pero que aún necesitan asesoramiento. He seend algunos archivos de configuración de nginx alrededor, y que parece mucho más comprensible que el de Apache, pero tal vez estoy equivocado?

A partir de las informaciones que se reunieron, NGinx sería la mejor opción cuando se quiere de equilibrio de carga, de modo que si su aplicación se extendió en varias máquinas, derecho? Como estoy pensando en mi aplicación para scalling (y rendimiento), parece que es lo que necesito, pero tal vez lo que necesito saber más cosas acerca de cuándo es interesante para pasar de Apache a NGinx. Vale la pena el cambio a NGinx para todas mis aplicaciones actuales? ¿Cuánto cuesta? (Me refiero, es costoso en tiempo para cambiar de uno a otro?) Puedo usar Apache y NGinx, tanto en la misma máquina sin ningún problema?

Nota : por Favor, no me urge para el uso de lenguajes interpretados en lugar de C++, no relacionadas con la pregunta. Ver el CPPCSM justificación de la página para ver qué tipo de aplicaciones se pueden beneficiar fromt. Puedo entender perfectamente los inconvenientes (en comparación con aplicaciones en Ruby y Python, que yo ya uso para menos, hambriento de poder, webapps) y estoy bien con ella.

10voto

Artyom Puntos 364

Varios puntos:

La principal diferencia entre el Apache y Nginx o Lighttpd (que a mi personalmente me parece mucho) es la arquitectura:

  1. Apache maneja una conexión por proceso o por hilo (dependiendo del mod-XYZ)
  2. Nginx y Lighttpd son de un solo subproceso manejar varias conexiones en un solo bucle de eventos.

Como resultado:

  1. Nginx y Lighttpd escala mucho mejor bajo alto número de conexiones simultáneas, digamos que con 1000 conexiones Apache casi morir, ya que obligaría a 1000 procesos en mod-prefork o 1000 hilos en mod-trabajador.

    Si usted está planeando utilizar la Cometa technologies, donde cada conexión requiere tiempo de sondeo de la conexión HTTP, a continuación, Apache no sería aceptable, ya que no funciona bien.

  2. Nginx y Lighttpd consumir menos memoria como cada conexión requieren +- dos sockets (HTTP y FastCGI), intermedio búfer de memoria y de algunos estados, mientras que Apache necesitaría toda la conversación, incluyendo la pila y otras cosas.

Desde mi experiencia personal en puntos de referencia que hice Lighttpd (y supongo Nginx así) es ligeramente más rápido con FastCGI backend, a continuación, Apache, pero esto es por la baja cantidad de conexiones.

Ahora otro punto es que cuando quieres hacer algo de carga diferencias usando FastCGI conexiones.

En la arquitectura tradicional hay

                               |
                              HTTP
                               |
         Balancer (Nginx/Lighttpd/Cherooke/something-else)
            /      |           |            |      \
         HTTP    HTTP         HTTP        HTTP     HTTP
         /         |           |            |         \
 Apache+PHP   Apache+PHP   Apache+PHP   Apache+PHP   Apache+PHP   
  Server 2    Server 3     Server 4      Server 5     Server 6

Porque Apache maneja grupos de procesos de cada uno de ellos ejecutando mod-PHP (o de otros modos)

Cuando usted utiliza CppCMS que se encarga de piscinas en su propio usted puede hacer algo diferente:

                               |
                              HTTP
                               |
         Balancer (Nginx/Lighttpd/Cherooke/something-else)    
                           Server 1
            /      |           |            |      \
         FCGI    FCGI         FCGI        FCGI     FCGI
         /         |           |            |         \
    CppCMS App  CppCMS App  CppCMS App    CppCMS App  CppCMS App
     Server 2    Server 3     Server 4      Server 5     Server 6

Así que, básicamente, no necesita otro nivel de direccionamiento indirecto porque CppCMS asas proceso, el hilo y la conexión de la piscina. Mientras PHP/Ruby/Perl necesidad de algunos de Apache mod-XYZ o manejar su propia FastCGI conector.

6voto

Kromey Puntos 1977

Nginx, hablando muy (muy) generalmente, puede obtener un rendimiento muy superior que Apache gracias a un diferente enfoque arquitectónico para el problema de servir las páginas de la web. Nginx también fue construido principalmente como un proxy inverso, y que llena ese papel excepcionalmente bien (este es el de equilibrio de carga de poco usted se refirió a); Apache, por otro lado, fue construido para servir páginas web, y más tarde adquirido la capacidad de proxy.

Dicho esto, hay casi ciertamente áreas Apache constantemente superan Nginx, mientras que hay otros en los que Nginx como constantemente superan Apache.

La respuesta corta es que si Apache está trabajando para usted, no hay necesidad de cambiar. (Y te digo como ex-usuario de Apache que se ha convertido en un completamente convertido Nginx discípulo.) Sólo cuando el tráfico a su servidor comienza a llegar a los niveles en el que Apache se está convirtiendo en su cuello de botella (esto está en el orden de algunos miles de conexiones simultáneas, pero varía ampliamente basado en las especificaciones de su servidor y otros la carga del servidor), o si usted está tratando de ejecutar Apache en un recurso-pobres del medio donde se puede apenas caben, hace el cambio a Nginx darle sólido beneficio.

Dicho esto, si usted desea cambiar a Nginx (que me animan!), a continuación, ir a por ello. Va a ver ningún beneficio? 9 de cada 10 veces: No, no. Pero usted ha dicho que te gusta el archivo de configuración de idioma de Nginx mejor, así que si te hace sentir más cómodo para configurar Nginx de Apache, así, que es un beneficio para usted! (Personalmente, me parece configuración de Apache más fáciles de leer en general, pero que podría ser porque me he pasado muchos, muchos años la lectura de ellos, y sólo unos pocos meses se han gastado en Nginx!)

En una nota lateral: Usted mencionó su deseo de construir una aplicación web en C++. Por el bien de su cordura, le recomiendo que en lugar de utilizar un lenguaje de alto nivel como PHP, Python, o incluso Java. A continuación, el perfil de su código y considerar la creación de C++basado en módulos para resolver los cuellos de botella (Python y PHP permitir que esta bastante facilidad; no sé acerca de Java). Si usted está preocupado por el rendimiento general, considere esto: EVE Online, el mayor unsharded MMORPG en el mundo, está construido sobre una variante de Python (Stackless Python), con sólo los componentes clave (por ejemplo, los gráficos de las bibliotecas), escrito en C++. Si Python puede manejar eso, seguramente no puede manejar su web app?

3voto

Zameer Manji Puntos 1213

Nadie puede realmente responder a la "cuándo debo cambiar" parte-dependerá de su carga, el rendimiento de su propio código de la aplicación, etc.

NGinx, que parece ser más eficientes que los de Apache

nginx utiliza un único proceso (o un número muy pequeño de los procesos de trabajo) para controlar todas las conexiones de cliente utilizando evented I/O. Apache tiene varios "Multi-Módulos de Procesamiento" disponibles, pero todos ellos se inclinan más por los muchos procesos / muchos hilos. Como resultado, Apache generalmente consumen más memoria RAM y CPU que nginx básicos de la conexión HTTP manejo. Usted puede obtener una visión general de los distintos tipos de conexión de manejo de enfoques de Kegel C10K página.

muy de rendimiento intensivo de la aplicación web (usando C++ con CPPCMS)

Me gustaría fuertemente sugieren considerar el hacer de la básico de la webapp en un lenguaje de alto nivel (Python, o tal vez Ruby, Scala), y el uso de un messsage cola para enviar entradas de trabajo de los trabajadores las máquinas que manejan el "rendimiento de obra" tareas de forma asíncrona.

NGinx sería la mejor opción cuando se quiere de equilibrio de carga,

nginx es un buen equilibrador de carga; pero hay muchas opciones en ese espacio.

Puedo usar Apache y NGinx, tanto en la misma máquina sin ningún problema?

Sí. Simplemente ejecutar en diferentes IP, números de puerto y/o direcciones IP.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: