In questa pagina viene descritto cosa sono le code di attività, quando e come utilizzarle. Le code di attività consentono alle applicazioni di svolgere operazioni, chiamate attività, in modo asincrono al di fuori di una richiesta dell'utente. Se un'app deve eseguire le operazioni in background, aggiunge le attività alle code di attività. Le attività vengono eseguite più tardi, dai servizi worker.
Il servizio Task Queue è progettato per il lavoro asincrono. Non offre garanzie precise sui tempi di invio delle attività e pertanto non è adatto per le applicazioni interattive in cui un utente è in attesa del risultato.
Code in modalità push e code in modalità pull
Le code di attività sono di due tipi: push e pull. Il modo in cui il servizio coda di attività invia le richieste di attività ai servizi worker è diverso per le diverse code.
Le code in modalità push eseguono le attività distribuendo richieste HTTP ai servizi worker App Engine. Inviano queste richieste con una frequenza costante e affidabile e garantiscono un'esecuzione affidabile delle attività. Poiché puoi controllare la frequenza di invio delle attività dalla coda, puoi controllare il comportamento di scalabilità dei worker e quindi i costi.
Poiché le attività vengono eseguite come richieste destinate ai servizi App Engine, sono soggette a scadenze rigorose. Le attività gestite dai servizi di scalabilità automatica devono terminare entro dieci minuti. Le attività gestite dai servizi di scalabilità di base e manuale possono essere eseguite fino a 24 ore.
Le code in modalità pull non eseguono affatto l'invio delle attività. Dipendono da altri servizi worker per "prendere in prestito" le attività dalla coda. Le code in modalità pull offrono maggiore potenza e flessibilità su quando e dove vengono elaborate le attività, ma richiedono anche una maggiore gestione dei processi. Quando un'attività viene noleggiata, il lavoratore in leasing dichiara una scadenza. Al momento della scadenza, il worker deve completare l'attività ed eliminarla oppure il servizio coda di attività consentirà a un altro worker di prenderla in leasing.
Tutte le attività in coda di attività vengono eseguite in modo asincrono. L'applicazione che crea l'attività la mette in coda. All'applicazione di origine non viene notificato se l'attività è stata completata o meno o se è riuscita.
Se un worker non riesce a elaborare un'attività, il servizio coda di attività fornisce alla coda un meccanismo di ripetizione, in modo che l'attività possa essere ritentata per un numero limitato di volte.
Casi d'uso
Code in modalità push
Un tipico caso d'uso delle code in coda in modalità push è un'operazione "lenta". Prendiamo in considerazione un sistema di messaggistica sui social network. Ogni volta che un utente invia un messaggio, la rete deve aggiornare i follower del mittente. Questa operazione può richiedere molto tempo. Utilizzando una coda in modalità push, l'applicazione può accodare un'attività per ogni messaggio man mano che questo viene inviato a un servizio worker per l'elaborazione. Quando il worker riceve la richiesta dell'attività, può recuperare l'elenco dei follower del mittente e aggiornare il database di ciascuno. Il worker può essere reso ancora più efficiente accodando un'altra attività push per ogni aggiornamento del database.
Le code in modalità push possono essere utilizzate anche dalle attività pianificate. Immagina un'applicazione che implementa una campagna pubblicitaria. Un gruppo di attività scritte per inviare email può essere aggiunto a una coda in modalità push con istruzioni per trattenere le attività fino a un momento specifico nel futuro. All'arrivo della data di scadenza, il servizio coda di attività inizia a inviare richieste per l'esecuzione delle attività.
Code in modalità pull
Le code in modalità pull funzionano bene quando è necessario raggruppare le attività per un'esecuzione efficiente. Una soluzione sfrutta la possibilità di associare un tag a un'attività di pull. I worker possono prendere in prestito un gruppo di attività che hanno lo stesso tag. Un tipico esempio potrebbe essere un'app che mantiene le classifiche per numerosi giochi diversi, con molti giocatori e gruppi costantemente in gioco. Ogni volta che viene raggiunto un nuovo miglior punteggio, l'app può accodare un'attività di pull con il punteggio e il giocatore e utilizzare l'ID gioco come tag dell'attività. Un lavoratore si sveglia periodicamente, prende in leasing un gruppo di attività con lo stesso ID gioco e aggiorna la classifica. Puoi prendere in leasing le attività in modo esplicito, utilizzando un valore di tag specificato, o lasciare che sia il servizio a decidere quale gruppo di attività con tag simili inviare.
Il raggruppamento con i tag può essere molto potente. Poiché i tag possono essere generati dinamicamente mentre l'app è in esecuzione, un worker può gestire i nuovi ID dei giochi senza alcuno sforzo particolare.
Passaggi successivi
- Leggi ulteriori informazioni sulle code in modalità push.
- Leggi ulteriori informazioni sulle code in modalità pull.