¿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
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.
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.
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.
El autor de nginx mod_wsgi explica algunas diferencias con Apache mod_wsgi in this mailing list message.
- 1. Comparar nginx + Apache + mod_wsgi vs nginx + uWSGI?
- 2. Interacción Apache + mod_wsgi
- 3. Django mod_wsgi apache
- 4. Cherrypy vs. Apache/mod_wsgi
- 5. Implementando Django (fastcgi, apache mod_wsgi, uwsgi, gunicornio)
- 6. mod_wsgi, mod_python o solo cgi?
- 7. Django/Apache/mod_wsgi: Ningún módulo llamado importlib
- 8. Hola mundo en mod_wsgi
- 9. Django, python, mod_wsgi y Apache worker
- 10. Configuración del host virtual Django. Apache mod_wsgi
- 11. sitios Django múltiples con Apache y mod_wsgi
- 12. mod_wsgi force reload modules
- 13. Django mod_wsgi MemoryError
- 14. mod_wsgi falla bajo presión
- 15. lo que es más rápido que un servidor de producción Django: twisted.web2 vs Apache mod_wsgi
- 16. Implementación de varias aplicaciones de django en Apache con mod_wsgi
- 17. Python cuelga en lxml.etree.XMLSchema (árbol) con Apache + mod_wsgi
- 18. Múltiples sitios django en Apache/Windows/mod_wsgi - problema con win32
- 19. Varios sitios usando Django y mod_wsgi en Apache
- 20. Ejecutando Python desde un virtualenv con Apache/mod_wsgi, en Windows
- 21. Apache2: mod_wsgi o mod_python, ¿cuál es mejor?
- 22. Convirtiendo de mod_python a mod_wsgi
- 23. ¿Cómo puedo obtener mod_wsgi trabajando en Mac?
- 24. no puede obtener mod_wsgi y Apache con Django a trabajar
- 25. ¿Cómo utilizo las rutas de Flask con Apache y mod_wsgi?
- 26. Apache 2 mod_wsgi, 500 Error interno del servidor
- 27. Django + mod_wsgi + apache: ImportError at/No module named djproj.urls
- 28. Tuning mod_wsgi en el modo demonio
- 29. archivo estático con mod_wsgi en django
- 30. mod_wsgi no está cumpliendo WSGIPythonHome
¿podría agregar algunas nuevas entradas sobre el nuevo mpm basado en eventos Apache 2.4? – regilero
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. –
Hola, ¿podemos usarlo ahora? – user3526