with - Ejecutando Django con FastCGI o con mod_python
python embebido en html (7)
¿cuál recomendarías? que es mas rapido, confiable? apache mod_python o nginx / lighttpd FastCGI?
lighttpd con FastCGI será nominalmente más rápido, pero realmente el tiempo que toma ejecutar su código python y cualquier acierto en la base de datos va a empequeñecer absolutamente cualquier beneficio de rendimiento que obtenga entre los servidores web.
mod_python y apache te darán un poco más de flexibilidad en cuanto a las características si quieres escribir código fuera de django que haga cosas como digest auth, o cualquier encabezado de HTTP de fantasía. Quizás desee usar otras características incorporadas de apache como mod_rewrite.
Si la memoria es una preocupación, mantenerse alejado de apache / mod_python ayudará mucho. Apache tiende a usar mucha RAM, y el código mod_python que se pega a todas las funciones de Apache también ocupa mucho espacio de memoria. Sin mencionar que la naturaleza de multiprocesos de apache tiende a consumir más RAM, ya que cada proceso crece al tamaño de su solicitud más intensa.
He hecho ambas cosas, y Apache / mod_python tendía a ser más fácil de trabajar y más estable. Pero en estos días he saltado a Apache / mod_wsgi, que es todo lo que siempre he querido y más:
- Fácil administración de procesos demoníacos.
- Como resultado, el aislamiento del proceso es mucho mejor (ejecutar múltiples sitios en la misma configuración de Apache con mod_python casi siempre termina en un problema: las variables de entorno y las extensiones C se filtran en los sitios cuando se hace eso).
- Recargas fáciles de código (
.wsgi
correctamente y puede tocar el archivo.wsgi
para volver a cargar en lugar de reiniciar Apache). - Uso de recursos más predecible. Con mod_python, el uso de la memoria de un proceso secundario Apache dado puede saltar mucho. Con mod_wsgi es bastante estable: una vez que todo está cargado, sabrá cuánta memoria usará.
Lo estoy usando con nginx. no estoy seguro si es realmente más rápido, pero ciertamente menos carga de RAM / CPU. También es más fácil ejecutar varios procesos de Django y hacer que nginx asigne cada prefijo de URL a un socket diferente. aún no aprovecha al máximo el módulo memcached de nginx, pero las primeras pruebas muestran una gran ventaja de velocidad.
Personalmente, he estado trabajando con FastCGI desde hace un tiempo (6 meses más o menos) y los tiempos de respuesta "parecen" más rápidos al cargar una página de esa manera que mod___python. Sin embargo, la razón crítica para mí es que no pude ver una forma obvia de hacer varios sitios desde la misma instalación de apache / mod_python, mientras que FastCGI era relativamente fácil de usar.
No he llevado a cabo ningún experimento particularmente exhaustivo :-)
[Editar] Hablando desde la experiencia, la configuración de FastCGI puede ser un poco dolorosa la primera vez. ¡Sigo pensando en escribir una guía ...!
También hay mod_wsgi, parece ser más rápido que mod_python y el modo daemon funciona de manera similar a FastCGI
Nginx con mod_wsgi
Recomendaría las configuraciones de WSGI; Sigo pensando en deshacerme de apache, pero siempre hay alguna aplicación heredada en el servidor que parece necesitarlo. Además, la ecología de la aplicación WSGI es muy variada y permite trucos ingeniosos, como el "middleware" WSGI en cadena de margaritas entre el servidor y la aplicación.
Sin embargo, actualmente hay problemas conocidos con algunas aplicaciones y mod_wsgi de apache , particularmente algunas aplicaciones de ctypes, así que ten cuidado si estás intentando ejecutar, digamos, geodjango que usa ctypes extensivamente. Actualmente estoy trabajando en torno a esos problemas volviendo a fastcgi por mi cuenta.