Tengo un servidor con varios dominios y aplicaciones ejecutándose, todo a través de Apache. Todo está bien en este momento, pero tengo planes de desarrollar una aplicación web que requiera mucho rendimiento (usando C ++ con CPPCMS), comenzando con mi servidor para realizar pruebas, tal vez obteniendo un servidor separado solo para esta aplicación una vez que esté lista.
De todos modos, he escuchado mucho sobre NGinx, que parece ser más eficaz que Apache, así que me preguntaba si valía la pena trabajar con él para ese nuevo proyecto. No está claro en mi mente porque no sé qué tipo de cuello de botella de rendimiento NGinx soluciona exactamente.
No soy un usuario avanzado de Apache, soy un pobre administrador de Linux y no desarrollo muchas aplicaciones web (pero tengo nociones). Me dedico principalmente a escribir software, por lo que la parte del servidor web a veces es muy oscura para mí. Cada vez que tengo que configurar un sitio web a través de apach, necesito mucho tiempo para navegar en el documento para asegurarme de no romper todo.
Dicho esto, creo que estoy mejorando mucho de este lado, pero todavía necesito consejos. He visto algunos archivos de configuración nginx, y eso parece mucho más comprensible que los de Apache, pero ¿tal vez estoy equivocado?
Según la información que reuní, NGinx sería la mejor opción cuando desee equilibrar la carga, por lo que si tiene su aplicación distribuida en varias máquinas, ¿verdad? Como estoy pensando en mi aplicación para escalamiento (y rendimiento), parece que es lo que necesito, pero tal vez necesito saber más sobre cuándo es interesante pasar de Apache a NGinx. ¿Vale la pena cambiar a NGinx para todas mis aplicaciones actuales también? ¿Cuanto cuesta? (Quiero decir, ¿es costoso a tiempo cambiar de uno a otro?) ¿Puedo usar Apache y NGinx en la misma máquina sin ningún problema?
Nota al margen : Por favor, no me inste a usar lenguajes interpretados en lugar de C ++, no está relacionado con la pregunta. Consulte la página de justificación de CPPCSM para ver qué tipo de aplicación puede beneficiarse de ella. Entiendo perfectamente los inconvenientes (en comparación con las aplicaciones en Ruby y Python, que ya uso para aplicaciones web que consumen menos energía) y estoy de acuerdo con eso.
fuente
Nginx, hablando muy ( muy ) en general, puede obtener un rendimiento mucho mayor que Apache gracias a un enfoque arquitectónico diferente al problema de publicar páginas en la web. Nginx también se creó principalmente como un proxy inverso, y cumple ese rol excepcionalmente bien (este es el bit de equilibrio de carga al que aludiste); Apache, por otro lado, fue creado para servir páginas web, y luego ganó la capacidad de proxy.
Dicho esto, es casi seguro que hay áreas en las que Apache superará constantemente a Nginx, mientras que hay otras en las que Nginx superará a Apache de manera constante.
La respuesta corta es que si Apache está trabajando para usted, no hay necesidad de cambiar. (Y digo esto como un antiguo usuario de Apache que se ha convertido en un discípulo de Nginx totalmente convertido). Solo cuando el tráfico a su servidor comienza a alcanzar niveles en los que Apache se está convirtiendo en su cuello de botella (esto es del orden de algunos miles de conexiones simultáneas, pero variará enormemente según las especificaciones de su servidor y otra carga del servidor), o si está tratando de ejecutar Apache en un entorno de escasos recursos donde apenas puede encajar, cambiar a Nginx le brinda un beneficio sólido.
Dicho esto, si desea cambiar a Nginx (¡lo que sí animo!), Entonces hágalo. ¿Verás algún beneficio? 9 de cada 10 veces: No, no lo harás. Pero mencionó que le gusta más el idioma del archivo de configuración de Nginx, por lo que si le hace sentir más cómodo configurar Nginx que Apache, ¡eso es un beneficio para usted! (Personalmente, creo que las configuraciones de Apache son más fáciles de leer en general, pero eso podría deberse a que pasé muchos, muchos años leyéndolas, ¡y solo unos pocos meses en Nginx!)
En una nota al margen: mencionaste tu deseo de construir una aplicación web en C ++. En aras de su cordura, le recomiendo encarecidamente que utilice un lenguaje de nivel superior como PHP, Python o incluso Java. Luego perfile su código y considere crear módulos basados en C ++ para abordar cuellos de botella específicos (Python y PHP lo permiten con bastante facilidad; no sé acerca de Java). Si le preocupa el rendimiento general, tenga en cuenta lo siguiente: EVE Online, el MMORPG sin sombrear más grande del mundo, se basa en una variante de Python (Stackless Python), con solo componentes clave (por ejemplo, las bibliotecas de gráficos) escritos en C ++. Si Python puede manejar eso, ¿seguramente puede manejar su aplicación web?
fuente
Nadie puede responder realmente la parte "cuándo debería cambiar": dependerá de su carga, el rendimiento de su propio código de aplicación, etc.
nginx usa un solo proceso (o un número muy pequeño de procesos de trabajo) para manejar todas las conexiones de los clientes que usan E / S con eventos. Apache tiene varios "Módulos de procesamiento múltiple" disponibles, pero todos se inclinan más hacia muchos procesos / muchos hilos. Como resultado, Apache generalmente consumirá más RAM y CPU que nginx para el manejo básico de la conexión HTTP. Puede obtener una descripción general de los diferentes enfoques de manejo de conexiones en la página C10K de Kegel .
Me fuertemente sugieren considerar hacer la aplicación web básica en un lenguaje de alto nivel (Python, o tal vez Ruby, Scala), y el uso de mensajes con cola para enviar entradas de trabajo a las máquinas de los trabajadores que manejan las tareas "rendimiento intensivo" de forma asíncrona.
nginx es un buen equilibrador de carga; pero hay muchas opciones en ese espacio .
Si. Simplemente ejecútelos en diferentes números de puerto IP y / o direcciones IP.
fuente