6

Pregunté this question hace unas semanas. Hoy en realidad, he escrito y publicado una aplicación estándar de Django, es decir, un administrador de Dhango relacional completamente funcional con respaldo de base de datos (y consecuentemente totalmente funcional) habilitado por Google CloudSQL. La única vez que tuve que desviarme de hacer cosas, la forma estándar de Django fue enviar un correo electrónico (tenía que hacerlo de la manera GAE). Mi disposición es GAE 1.6.4, Python2.7, Django 1.3 utilizando la siguiente en app.yaml:Django en GoogleAppEngine: Howto rendimiento

libraries: 
- name: django 
    version: "1.3" 

Sin embargo, yo necesito que sugiere claros pasos de acción para mejorar el tiempo de respuesta de la solicitud inicial en frío de esta aplicación Django. Tengo un simple sitio web webapp2 en GAE, que no no golpear la base de datos, y cuando frío el tiempo de respuesta es de 1.56s. El de Django, cuando , golpea la base de datos con 2 consultas (dos consultas 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 viene a la mente es eliminar las clases middleware que no necesito y otras optimizaciones específicas de Django. Sin embargo, los consejos que mejoran las cosas también desde el punto de vista de GAE serían realmente útiles.

N.B. No quiero que esto se convierta en una discusión sobre los méritos de ir a por Django en GAE. Puedo mencionar que mi experiencia personal en Django, y la productividad de desarrollo resultante, influyeron considerablemente en la adopción de Django en comparación con otros marcos. Además, con CloudSQL, es fácil alejarse de GAE (¡con suerte no!) Ya que el código de Django funcionará en cualquier otro lugar con pocas (o ninguna) modificación. Se pueden encontrar discusiones relacionadas sobre dicho tema en here y here.

+0

¿Cuál es el tiempo de respuesta de la página de inicio cuando la aplicación está caliente? –

+0

¿Qué ya has perfilado? – DrTyrsa

+0

@DanielRoseman Promedia alrededor de la marca '200ms', que es excelente. –

Respuesta

2

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

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

Mi tiempo de inicio sigue siendo 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 al inicio, y que el tiempo de procesamiento es significativo. Si tienes 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.

+0

Las solicitudes de precalentamiento están diseñadas para esto; no es necesario que un cronjob lo haga. –

+0

@dragonx El problema debe estar relacionado con que Django sea pesado y consulte CloudSQL ... como con WebApp2 cuando * cold * responde siempre con la marca ~ 2s. Estoy haciendo algunos ajustes/mejoras que te permitirán conocer el resultado. –

+0

@NickJohnson Me centré en las optimizaciones solo de django, al eliminar el django-admin de habilitarse en la instancia de producción. En función de si la aplicación se está ejecutando en producción o localmente, configuré la variable de configuración Django 'DEBUG', y ahora también agregué' MIDDLEWARE_CLASSES' y 'INSTALLED_APPS' si estoy ejecutando localmente. También eliminé ~ 600Kb de medios estáticos de administración Django (están [no disponibles automáticamente] (http://stackoverflow.com/a/9863345/1211429) en producción). Estos ajustes de Django-focuse mejoraron mi tiempo de respuesta cuando * frío * de ~ 10s arriba a ~ 5s. –

2

Cuando no hay ninguna instancia ejecutándose, por ejemplo después de la actualización de la versión o cuando no hay una solicitud de 15 minutos, entonces una solicitud activará la carga de una instancia que tarda unos 10 segundos. Entonces, lo que estás viendo es normal.

Así que si su aplicación está inactiva por períodos más largos que 15min 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).

Actualización:

Usted puede evitar esto al permitir la facturación a continuación, en GAE admin en virtud de "Configuración de la aplicación" conjunto de instancias minimum Idle las posiciones de ajuste 1. Nota: el ajuste min no está disponible en aplicaciones gratuitas, solamente max .

+0

Por lo tanto, es el mismo problema que [este] (http://stackoverflow.com/questions/1854821/google-app-engine-application-extremely-slow) ... pero ¿cómo es que este calentamiento de los '10s' * sí lo hace? no sucede con las aplicaciones 'webapp2'? –

+0

No lo sé. Lo veo en mis aplicaciones de prueba de Java. –

+0

Ver la respuesta actualizada. –

Cuestiones relacionadas