Django en GoogleAppEngine: howto de rendimiento

Hice esta pregunta hace unas semanas. Hoy, en realidad, escribí y lancé una aplicación Django estándar, es decir, una base de datos relacional totalmente funcional respaldada por DB (y por lo tanto, una administración de Django completamente funcional) habilitada por Google CloudSQL . La única vez que tuve que desviarme de hacer las cosas a la manera estándar de Django fue enviar un correo electrónico (tuve que hacerlo a la manera GAE). Mi configuración es GAE 1.6.4 , Python2.7 , Django 1.3 usando lo siguiente en app.yaml :

 libraries: - name: django version: "1.3" 

Sin embargo, necesito que sugiera pasos claros para mejorar el tiempo de respuesta de la solicitud inicial cuando está frío de esta aplicación Django. Tengo un sitio web simple webapp2 en GAE, que no llega a la base de datos, y cuando está frío el tiempo de respuesta es de 1.56s . El Django, cuando está frío , llega a la base de datos con 2 consultas (dos consultas de count(*) sobre tablas que contienen menos de 300 filas cada una), y el tiempo de respuesta es de 10.73s . No es alentador para una página de inicio;)

Lo que me viene a la mente es eliminar las clases de middleware que no necesito y otras optimizaciones específicas de Django. Sin embargo, los consejos que mejoren las cosas también desde el punto de vista de GAE serían realmente útiles.

NB : No quiero que esto se convierta en una discusión sobre los méritos de elegir Django en GAE. Puedo mencionar que mi experiencia personal en Django, y la productividad resultante del desarrollo, tuvieron una gran importancia en la adopción de Django en lugar de otros marcos. Además, con CloudSQL, es fácil alejarse de GAE (¡espero que no!) Ya que el código Django funcionará en cualquier otro lugar con poca (o ninguna) modificación. Discusiones relacionadas sobre este tema se pueden encontrar aquí y aquí .

No tengo una respuesta completa, pero estoy contribuyendo ya que también me gustaría encontrar una solución. Actualmente estoy usando una tarea cron en ejecución (en realidad necesito la tarea cron, así que no es solo para mantener viva mi aplicación).

Lo he visto discutido en una de las listas de correo relacionadas con GAE / Python / Django que el tiempo requerido para cargar todos los archivos Django es significativo cuando se compara con la aplicación web, por lo que eliminar los componentes django que no usa de la implementación mejorar su tiempo de inicio también. He podido eliminar unos 3 segundos eliminando ciertas partes de la carpeta contrib. Los excluyo en mi app.yaml.

Mi tiempo de inicio es de alrededor de 6 segundos (aplicación completa, Django-nonrel, HRD). Solía ​​ser más como 4 cuando mi aplicación era más simple.

Mi sospecha es que Django verifica todos sus modelos en el inicio y que el tiempo de procesamiento es significativo. Si tiene tiempo para experimentar con una aplicación con absolutamente 0 modelos, me gustaría saber si tuvo algún impacto.

También tengo curiosidad por saber si sus dos consultas iniciales tienen un impacto significativo.

Cuando no hay ninguna instancia en ejecución, por ejemplo, después de la actualización de la versión o cuando no hay una solicitud durante 15 minutos, entonces una solicitud activará la carga de una instancia que demora unos 10 segundos. Así que lo que estás viendo es normal.

Entonces, si su aplicación está inactiva por períodos más largos de 15 minutos, verá este comportamiento. Una solución alternativa es hacer que un trabajo cron haga ping a su instancia cada 10 minutos (aunque creo que a Google no le gusta eso).

Actualizar:

Puede evitar esto habilitando la facturación luego en GAE admin. En “Configuración de la aplicación” establezca la configuración minimum Instancias inactivas en 1. Nota: la configuración min no está disponible en aplicaciones gratuitas, solo max .