Django в GoogleAppEngine: руководство по производительности - PullRequest
6 голосов
/ 30 марта 2012

Я задавал этот вопрос несколько недель назад.Сегодня я на самом деле написал и выпустил стандартное приложение Django, то есть полностью функциональное реляционное приложение с поддержкой БД (и, следовательно, полностью функциональное администратор Django), поддерживаемое Google CloudSQL .Единственный раз, когда мне приходилось отклоняться от выполнения стандартного способа Django, была отправка электронной почты (пришлось сделать это способом GAE).Моя настройка GAE 1.6.4, Python2.7, Django 1.3 с использованием следующего в app.yaml:

libraries:
- name: django
  version: "1.3"

Однако мне нужно, чтобы вы предложили четкие действенные шаги, чтобы улучшить время откликапервоначального запроса, когда холодно этого приложения Django.У меня есть простой webapp2 веб-сайт по GAE, который не попадает в БД, а когда cold время отклика составляет 1.56s.Django, когда cold , обрабатывает БД двумя запросами (два count(*) запроса к таблицам, содержащим менее 300 строк каждая), а время ответа составляет 10.73s!Не радует домашняя страница;)

В голову приходят следующие вещи: удаление ненужных мне классов middleware и другие оптимизации для Django.Однако советы, которые улучшают вещи также с точки зрения GAE, были бы действительно полезны.

NB Я не хочу, чтобы это стало обсуждением преимуществ использования Django в GAE.Я могу упомянуть, что мой личный опыт в Django и, как следствие, продуктивность разработки значительно повлияли на принятие Django в отличие от других систем.Более того, с CloudSQL легко отойти от GAE (надеюсь, что нет!), Так как код Django будет работать везде с небольшими (или никакими) изменениями.Связанные обсуждения по этой теме можно найти здесь и здесь .

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

У меня нет полного ответа, но я помогаю, так как я бы тоже хотел найти решение. В настоящее время я использую запущенное задание cron (мне действительно нужно задание cron, так что оно предназначено не только для поддержки моего приложения).

Я видел, как в одном из списков рассылки, связанных с GAE / Python / Django, обсуждалось, что время, необходимое для загрузки всех файлов Django, существенно по сравнению с webapp, поэтому удаление компонентов django, которые вы не используете от развертывания должно улучшить ваше время запуска. Мне удалось сбрить около 3 секунд, удалив определенные части папки contrib. Я исключаю их в моем app.yaml.

Мое время запуска по-прежнему составляет около 6 секунд (полное приложение, Django-nonrel, HRD). Раньше было больше 4, когда мое приложение было проще.

Я подозреваю, что Django проверяет все свои модели при запуске, и что время обработки является значительным. Если у вас есть время, чтобы поэкспериментировать с приложением с абсолютно 0 моделями, мне было бы интересно, оказало ли это какое-либо влияние.

Мне также любопытно, окажут ли ваши два начальных запроса какое-либо существенное влияние.

2 голосов
/ 30 марта 2012

Если экземпляр не запущен, например, после обновления версии или когда нет запроса в течение 15 минут, запрос инициирует загрузку экземпляра, которая занимает около 10 секунд. Так что то, что вы видите, нормально.

Так что, если ваше приложение простаивает дольше 15 минут, вы увидите это поведение. Один из обходных путей заключается в том, чтобы задание cron проверяло ваш экземпляр каждые 10 минут (хотя я считаю, что Google это не нравится).

Обновление:

Этого можно избежать, включив выставление счетов, затем в GAE admin в разделе «Настройки приложения» установите minimum Значение Idle Instances на 1. Примечание: настройка min недоступна для бесплатных приложений, только max.

...