Задачи, задания Cron или Backends для приложения - PullRequest
7 голосов
/ 30 августа 2011

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

Я должен сделать следующие шаги:

1) У меня более 15 000 сайтов, с которых мне нужно получать данные с регулярным графиком и без какого-либо взаимодействия с пользователем. Общее количество сайтов не становится статичным, но все они сохраняются в хранилище данных [Table0] вдоль интервала, с которым они читаются. Интервал может варьироваться от обычного до каждых 30 дней.

2) Для каждого сайта из шага # 1, который соответствует критериям расписания «извлечения», мне нужно извлечь данные из него через HTTP GET (опять же, это может быть все из них или всего 2 или 3 сайта). Как только я получу ответ от сайта, проанализируйте результат и сохраните эти данные в хранилище данных как [Table1].

3) Для всех данных, которые недавно были помещены в хранилище данных в [Table1] (они будут иметь специальный флаг), мне нужно отправить дополнительный HTTP-запрос на сторонний сайт, чтобы выполнить некоторую дополнительную обработку. Как только я получаю данные с этого сайта, я сохраняю всю необходимую информацию в другой таблице [Table2] в хранилище данных.

4) Как только данные будут доступны и готовы с шага № 3, мне нужно взять их все, выполнить дополнительное преобразование и обновить исходную таблицу [Table1] в хранилище данных.

Я не уверен, какой из различных компонентов мне нужно использовать, чтобы гарантировать, что я смогу выполнить каждую часть работы, не превышая крайний срок ответа, установленный на веб-запросы GAE. Я полагаю, что для запросов, инициированных заданиями и задачами cron, у вас есть 10 минут для его выполнения, тогда как для типичных пользовательских запросов разрешается 30 секунд.

Ответы [ 3 ]

5 голосов
/ 30 августа 2011

Очереди задач - лучший способ сделать это в целом, но вы можете попробовать API-интерфейс конвейера App Engine , который разработан именно для того типа рабочих процессов, о котором вы говорите.

3 голосов
/ 31 августа 2011

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

  1. Backends - используйте их для любых длительных, интенсивных задач ввода-вывода, которые у вас могут быть (веб-сканирование - хороший пример(при условии, что вы можете отложить обработку, требующую большого объема вычислений, на более поздний срок).
  2. Mapreduce API - отлично подходит для задач, требующих большого объема вычислений / параллельных заданий, таких как сбор статистики, индексирование и т. д. До недавнего времени в этой библиотеке была только реализация mapper,но недавно Google также выпустил Shuffler в памяти, который подходит для заданий, занимающих около 100 МБ.
  3. Очереди задач - для случаев, когда все остальное терпит неудачу: -).
  4. Cron - в основномзапускать периодические задачи - в каком контексте вы их выполняете, зависит только от вас.

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

0 голосов
/ 30 августа 2011

Я отказался от GAE до выхода Backends, поэтому не могу это комментировать.Но то, что я сделал несколько раз, было:

  • Запланированный Cron для запуска процесса
  • Обработчик Cron вызывает URL-адрес задачи
  • задача захватывает первый элемент (URL)из хранилища данных выполняет HTTP-запрос, обрабатывает данные, обновляет запись URL-адреса как работающую над ним и снова вызывает URL-адрес задачи.

Таким образом, cron в основном периодически запускает задачу taskqueue, и Taskqueue запускается рекурсивно, покаоно достигает некоторой точки остановки.

Вы можете увидеть это в действии одно из моих общедоступных приложений GAE - https://github.com/mavenn/watchbots-gae-python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...