2011-08-30 12 views
7

Sto provando a costruire un'app GAE non banale e non sono sicuro se un cron job, task, backend o un mix di tutti è ciò che devo usare basato sul limite di timeout della richiesta che GAE ha per le richieste HTTP.Attività, lavori Cron o backend per un'app

Le fasi distinte che devo fare sono:

1) Ho verso l'alto di 15.000 siti devo estrarre dati da a intervalli regolari e senza l'intervento dell'utente. Il numero totale di siti non sta per essere statico, ma sono tutti salvati nel datastore [Table0] a lato dell'intervallo in cui vengono letti. L'intervallo può variare regolarmente come ogni giorno a ogni 30 giorni.

2) Per ciascun sito del passaggio 1 che soddisfa i criteri di pianificazione "pull", ho bisogno di recuperare i dati da esso tramite HTTP GET (ancora, potrebbe essere tutti o solo 2 o 3 siti) . Una volta ricevuta la risposta dal sito, analizzare il risultato e salvare questi dati nell'archivio dati come [Tabella1].

3) Per tutti i dati che è stato recentemente messo in archivio dati in [Tabella 1] (avranno una bandiera speciale), ho bisogno di emettere richiesta HTTP aggiuntivo per un sito di terze parti per fare un po 'di elaborazione supplementare. Non appena ricevo dati da questo sito, memorizzo tutte le informazioni rilevanti in un'altra tabella [Tabella2] nel datastore.

4) Non appena i dati sono disponibili e pronti dal passaggio n. 3, devo prenderne tutto ed eseguire alcune trasformazioni aggiuntive e aggiornare la tabella originale [Tabella1] nel datastore.

Non sono sicuro quale dei diversi componenti è necessario utilizzare per garantire di poter completare ogni parte del lavoro senza superare la scadenza di risposta che viene inserita nelle richieste Web di GAE. Per le richieste avviate dai lavori e dalle attività di cron, ritengo che sia possibile eseguire il completamento di 10 minuti, mentre le tipiche richieste guidate dall'utente sono consentite per 30 secondi.

risposta

3

GAE è una piattaforma robusta per il tuo caso d'uso. Ma, dal masochismo estremo, sto tentando qualcosa di simile. Così qui sono i miei due centesimi, in base alla mia esperienza finora:

  1. backend - essere utilizzate per qualsiasi a lungo in esecuzione, I/O attività ad alta intensità si possono avere (Web-Crawling è un buon esempio, supponendo può rinviare l'elaborazione intensiva di elaborazione per dopo).
  2. API di Mapreduce - eccellente per lavori di elaborazione intensiva/parallela come raccolta di statistiche, indicizzazione ecc. Fino a poco tempo, questa libreria aveva solo un'implementazione di mapper, ma recentemente Google ha anche rilasciato un Shuffler in memoria che è utile per lavori che misura circa 100 MB.
  3. Code attività - Per quando tutto il resto fallisce :-).
  4. Cron - principalmente per dare il via a compiti periodici - in quale contesto li si esegue, dipende da voi.

potrebbe essere una buona idea per progettare le attività di back-end in modo che possano essere programmati (manualmente, o forse interrogando l'utilizzo della quota corrente) nel contesto "Frontend" utilizzando le code di attività, se avete Frontend ricambio Cicli della CPU.

+1

Spero che non sembri troppo denigratorio di GAE. Penso che sia una grande piattaforma nonostante i suoi limiti - costringe il progettista a pianificare il consumo delle risorse in modo più approfondito. – tooringtest

0

Ho abbandonato GAE prima che i backend uscissero, quindi non posso commentare in merito. Ma, quello che ho fatto un paio di volte era:

  • Cron in programma per dare il via processo
  • Cron gestore richiama un URL compito
  • compito afferra prima voce (URL) da archivio dati, esegue richiesta HTTP, opera su dati, aggiorna il record dell'URL come se avesse funzionato su di esso e richiama di nuovo l'URL dell'attività.

Quindi cron sta essenzialmente svegliando taskqueue periodicamente e taskqueue viene eseguito in modo ricorsivo fino a raggiungere un punto di arresto.

Si può vedere in azione una delle mie app GAE pubbliche - https://github.com/mavenn/watchbots-gae-python.

+1

Si potrebbe anche fare un paio di cose per aiutare questo lavoro ad accadere più contemporaneamente, come se l'attività chiamasse l'attività successiva e passasse un cursore in modo che inizi nella posizione direttamente dopo l'ultimo batch. –

5

Le code delle attività sono il modo migliore per eseguire questa operazione in generale, ma è consigliabile controllare lo App Engine Pipeline API, progettato esattamente per il tipo di flusso di lavoro di cui si sta parlando.

Problemi correlati