2008-10-12 24 views
60

¿Qué usar para una aplicación WSGI python de tamaño mediano a grande, Apache + mod_wsgi o Nginx + mod_wsgi?

¿Qué combinación necesitará más memoria y tiempo de CPU?
¿Cuál es más rápido?
¿Cuál es conocido por ser más estable que el otro?

También estoy pensando en usar el servidor WSGI de CherryPy, pero he oído que no es muy adecuado para una aplicación de carga muy alta, ¿qué sabes de esto?

Nota: No utilicé Python Web Framework, simplemente lo escribí desde cero.
Nota ': Otras sugerencias también son bienvenidas.
En producción, Apache + mod_wsgi o Nginx + mod_wsgi?

Respuesta

71

Para nginx/mod_wsgi, asegúrese de leer:

http://blog.dscpl.com.au/2009/05/blocking-requests-and-nginx-version-of.html

Debido a la forma en Nginx es un sistema impulsado caso por debajo, que tiene características de comportamiento que son perjudiciales para las aplicaciones de bloqueo, como es el caso de WSGI aplicaciones basadas El peor de los casos es que con la configuración nginx de multiproceso, puede ver que las solicitudes de los usuarios se bloqueen aunque algunos procesos de trabajo nginx estén inactivos. Apache/mod_wsgi no tiene este problema ya que los procesos de Apache solo aceptarán solicitudes cuando tenga los recursos para manejar realmente la solicitud. Apache/mod_wsgi dará un comportamiento más predecible y confiable.

+0

¿podría agregar algunas nuevas entradas sobre el nuevo mpm basado en eventos Apache 2.4? – regilero

+2

El MPM basado en eventos de Apache es muy diferente de nginx. nginx es full async. Con el MPM basado en eventos en Apache, async se usa principalmente solo cuando se manejan sockets en el modo keep alive y algunas otras cosas que no recuerdo. Incluso con el evento MPM, las solicitudes se siguen transfiriendo para que sean procesadas por subprocesos separados de un grupo de subprocesos, por lo que todavía hay un recurso limitado. Debido a los sockets de keep alive ahora mantenidos por async, existe la posibilidad de un exceso de compromiso en los recursos, pero hay medios para lidiar con eso y la situación no sería tan mala como async. De todos modos, no recuerdo ahora cómo funciona exactamente. –

+0

Hola, ¿podemos usarlo ahora? – user3526

7

Una cosa que servidor web de CherryPy tiene a su favor es que es un servidor web pitón puro (que yo sepa), que puede o no puede hacer un despliegue más fácil para usted. Además, podría ver los beneficios de usarlo si solo está usando un servidor para WSGI y contenido estático.

(descarada testigo de control: Escribí el código WSGI que estoy a punto de mencionar)

Kamaelia tendrá soporte WSGI que viene en la próxima versión. Lo bueno es que probablemente podrá usar el prefabricado o crear el suyo utilizando el código HTTP y WSGI existente.

(fin enchufe descarado)

Dicho esto, teniendo en cuenta las opciones actuales, personalmente me gustaría probablemente ir con CherryPy, ya que parece ser la más simple de configurar y puedo entender el código Python más que para las puedo entender C código.

Puede intentar probar cada uno de ellos y ver cuáles son los pros y los contras de cada uno para su aplicación específica.

13

La principal diferencia es que nginx está diseñado para manejar grandes cantidades de conexiones en un espacio de memoria mucho más pequeño. Esto lo hace muy adecuado para aplicaciones que realizan conexiones tipo cometa que pueden tener muchas conexiones abiertas inactivas. Esto también le da una huella de memoria bastante más pequeña.

Desde una perspectiva de rendimiento crudo, nginx es más rápido, pero no tanto más rápido como para incluirlo como un factor determinante.

Apache tiene la ventaja en el área de módulos disponibles, y el hecho de que es bastante estándar. Cualquier host web con el que vaya tendrá instalado, y la mayoría de los técnicos estarán muy familiarizados con él.

Además, si usa mod_wsgi, es su servidor wsgi por lo que ni siquiera necesita cherrypy.

Aparte de eso, el mejor consejo que puedo dar es intentar configurar su aplicación en ambos y realizar una evaluación comparativa, ya que no importa lo que le digan, su kilometraje puede variar.

Cuestiones relacionadas