Как поддерживать работу приложения App Engine / Java с глухими запросами от веб-cron Java / Python?

  1. App Engine позволяет загрузить приложение за 30 секунд.
  2. Мое приложение занимает около 30 секунд - иногда больше, иногда меньше. Я не знаю, как это исправить.
  3. Если приложение простаивает (некоторое время не получает запрос), его необходимо перезагрузить.

Итак, чтобы избежать перезагрузки приложения, я хочу имитировать активность пользователя, периодически проверяя связь с приложением.

Но есть загвоздка. . .

Если я пингую приложение, и оно уже было выгружено App Engine, мой веб-запрос будет первым запросом к приложению, и приложение попытается перезагрузиться. Это может занять больше 30 секунд и превысить лимит времени загрузки.

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

Любые предложения по хорошему способу сделать это в веб-cron Python или Java (я предполагаю, что решение Python будет проще)?


person wheatgrass    schedule 11.07.2009    source источник
comment
почему ваше приложение загружается за 30 секунд? что ты используешь? log4j?   -  person dfa    schedule 11.07.2009
comment
Я думаю, что у DFA правильная идея - вероятно, лучше потратить ваше время, чтобы выяснить, почему для загрузки вашего приложения требуется 30 секунд. Сколько времени занимает типичный запрос после его загрузки? Требуется ли 30 секунд для запуска при запуске в среде разработки или только при развертывании? Вы где-то учитываете большие числа в статическом инициализаторе? :)   -  person Peter Recore    schedule 11.07.2009
comment
Определенно лучше выяснить, почему вашему приложению требуется 30 секунд для запуска. Это очень долгий срок для веб-приложения.   -  person Nick Johnson    schedule 11.07.2009
comment
Привет, давайте предположим, что он уменьшит его до 5 секунд, разумно ли иметь накладные расходы 5 секунд на каждый запрос - НЕТ! Создание cron или любых других периодических HTTP-запросов для поддержания работоспособности экземпляра не имеет смысла. Во-первых, нет никаких доказательств того, что этот экземпляр будет обслуживать следующий поступающий запрос (например, из другого сетевого местоположения и т. Д.), Во-вторых, он будет использовать квоту (что менее проблематично). Я считаю это препятствием для использования GAE в производстве ...   -  person Konrad    schedule 12.01.2010


Ответы (4)


Вероятно, было бы проще использовать cron, встроенный в App Engine чтобы ваше приложение работало.

person Dave Webb    schedule 11.07.2009

Я думаю, что вы просто хотите:

import httplib
hcon = httplib.HTTPConnection("foo.appspot.com")
hcon.request("GET", "/someURL")
hcon.close()
person Matthew Flaschen    schedule 11.07.2009
comment
httplib в App Engine реализован на основе urlfetch API - этот фрагмент не будет делать то, что вы ожидаете. - person Nick Johnson; 11.07.2009
comment
Ник, насколько я понимаю, он планировал запустить этот ping-код на компьютере / вне / App Engine. - person Matthew Flaschen; 18.07.2009

самый простой Java http-пингер:

URLConnection hcon = new URL("http://www.google.com").openConnection();
hcon.connect();
hcon.getInputStream().read();
person dfa    schedule 11.07.2009

В движке приложений также есть новая функция PAY, благодаря которой она может быть постоянно включена. Стоит около 0,30 доллара США в день. Просто войдите в свои платежные настройки и включите их, если вы не против заплатить за эту функцию. Я считаю, что это гарантирует, что вы всегда будете работать как минимум 3 экземпляра.

(Я не понимал, что попадание по URL-адресу / ping, которое вызвало раскрутку экземпляра, привело бы к превышению 30-секундного лимита!)

person DustinB    schedule 16.01.2011