2011-08-30 22 views
7

Próbuję skonstruować niebanalną aplikację GAE i nie jestem pewien, czy zadanie cron, zadania, zaplecza lub kombinacja wszystkiego jest tym, czego potrzebuję użyć na limicie czasu żądania, które GAE ma dla żądań HTTP.Zadania, zadania Cron lub Backendy dla aplikacji

poszczególnych etapów procesu należy zrobić, to:

1) Mam górę 15000 miejsc muszę pobierać dane z co w określonych odstępach czasu i bez udziału użytkownika. Łączna liczba witryn nie będzie statyczna, ale wszystkie są zapisywane w magazynie danych [Tabela0] wraz z interwałem, w którym są czytane. Przerwa może się różnić tak regularnie, jak każdego dnia, co 30 dni.

2) Dla każdej witryny z kroku nr 1, która pasuje do kryteriów harmonogramu "pull", muszę pobrać z niej dane przez HTTP GET (ponownie, może to być wszystkie z nich lub tylko 2 lub 3 witryny) . Po otrzymaniu odpowiedzi z witryny przeanalizuj wynik i zapisz te dane w magazynie danych jako [Tabela 1].

3) W przypadku wszystkich danych, które zostały ostatnio umieszczone w magazynie danych w [Tabela 1] (będą miały specjalną flagę), muszę wysłać dodatkowe żądanie HTTP do witryny innej firmy, aby wykonać dodatkowe przetwarzanie. Natychmiast po otrzymaniu danych z tej strony przechowuję wszystkie istotne informacje w innej tabeli [Tabela 2] w magazynie danych.

4) Gdy tylko dane będą dostępne i gotowe od kroku 3, muszę je wszystkie wykonać i wykonać dodatkową transformację i zaktualizować oryginalną tabelę [Tabela1] w magazynie danych.

Nie jestem pewien, który z różnych składników muszę użyć, aby zapewnić, że mogę wykonać każdą część pracy, nie przekraczając terminu odpowiedzi, który jest umieszczony na prośbach internetowych GAE. W przypadku żądań inicjowanych przez zadania i zadania cron, wierzę, że masz 10 minut na jego ukończenie, podczas gdy typowe żądania kierowane przez użytkownika są dozwolone przez 30 sekund.

Odpowiedz

3

GAE to wytrzymała platforma do zastosowań. Ale z ekstremalnego masochizmu próbuję czegoś podobnego. Więc tutaj są moje dwa centy, na podstawie mojego doświadczenia do tej pory:

  1. wspomagająca - Używaj ich za długo działających, I/O intensywnych zadań mogą mieć (Web-Crawling jest dobrym przykładem, zakładając, że może odroczyć intensywne przetwarzanie obliczeniowe na później).
  2. Interfejs API Mapreduce - doskonały do ​​intensywnych obliczeń/zadań równoległych, takich jak zbieranie statystyk, indeksowanie itp. Do tej pory ta biblioteka miała tylko implementację odwzorowania, ale ostatnio Google wypuściło także tasownik w pamięci, który jest dobry dla zadań, które mieści się w około 100 MB.
  3. Kolejki zadań - gdy wszystko inne zawiedzie :-).
  4. Cron - głównie do uruchamiania zadań okresowych - w którym kontekście je wykonujesz, należy do Ciebie.

To może być dobry pomysł, aby zaprojektować swoje zadania backend tak, że mogą być planowane (ręcznie lub być może przez odpytywanie aktualnej użycia przydziału) w „Frontend” kontekście użyciu kolejki zadań, jeśli masz wolny Frontend Cykle procesora.

+1

Mam nadzieję, że nie brzmi to zbyt dyskredytująco z GAE. Uważam, że jest to świetna platforma pomimo swoich ograniczeń - zmusza projektanta do bardziej kompleksowego planowania zużycia zasobów. – tooringtest

0

Porzuciłem GAE zanim pojawił się Backend, więc nie mogę tego komentować. Ale, co zrobiłem kilka razy było:

  • Cron zaplanowane skopać procesowi
  • Cron obsługi wywołuje URL zadanie
  • zadanie chwyta pierwszą pozycję (URL) z magazynu danych, wykonuje żądania HTTP, działa na danych, aktualizuje rekord adresu URL jako działający na nim i ponownie wywołuje adres URL zadania.

Tak więc cron zasadniczo budzi kolejkę zadań, a kolejka zadań wykonuje rekursywnie, aż osiągnie punkt zatrzymania.

Możesz zobaczyć w akcji jedną z moich publicznych aplikacji GAE - https://github.com/mavenn/watchbots-gae-python.

+1

Można również wykonać kilka czynności, aby pomóc w wykonywaniu tej pracy bardziej równolegle, np. Zlecić kolejne zadanie i podać kursor, aby rozpocząć od miejsca bezpośrednio po ostatniej partii. –

5

Kolejki zadań są najlepszym sposobem, aby to zrobić w ogólności, ale warto zapoznać się z App Engine Pipeline API, który jest przeznaczony do dokładnie tego rodzaju przepływu pracy, o którym mówisz.

Powiązane problemy