Questa pagina descrive come creare e personalizzare una coda in modalità push e come esaminare il contenuto di una coda.
Utilizzo di un file di configurazione della coda per creare code
Per elaborare un'attività, devi aggiungerla a una coda in modalità push. App Engine fornisce una coda in modalità push predefinita, denominata default
, che è configurata e pronta per l'uso con le impostazioni predefinite. Se vuoi, puoi semplicemente aggiungere tutte le attività alla coda predefinita, senza dover creare e configurare altre code.
Per aggiungere code o modificare la configurazione predefinita, modifica il file di configurazione della coda per la tua applicazione, che carichi su App Engine. Puoi creare fino a 100 code. Le code non possono essere create dinamicamente.
Questo file di configurazione della coda definisce due code:
queue:
- name: queue-blue
target: v2.task-module
rate: 5/s
- name: queue-red
rate: 1/s
Per caricare il file:
gcloud app deploy queue.yaml
Tutte le attività aggiunte a queue-blue
vengono inviate al modulo di destinazione v2.task-module
.
La frequenza di aggiornamento di queue-red
è passata da 5/s a 1/s. Le attività verranno rimosse dalla coda e inviate ai relativi target alla frequenza di 1 attività al secondo.
Se elimini una coda, devi attendere circa 7 giorni prima di crearne una nuova con lo stesso nome.
Esistono molti altri parametri che possono essere aggiunti al file di configurazione per personalizzare il comportamento di una coda in modalità push. Per ulteriori informazioni, consulta la documentazione di riferimento del file di configurazione della coda.
Definizione della frequenza di elaborazione della coda in modalità push
Puoi controllare la velocità di elaborazione delle attività in ciascuna coda definendo altre direttive, ad esempio rate
, bucket_size
e max_concurrent_requests
.
La coda di attività utilizza i bucket di token per controllare la frequenza di esecuzione delle attività. Ogni coda denominata ha un token bucket che contiene token, fino al numero massimo specificato da bucket_size
, o un massimo di 5 token se non specifichi la dimensione del bucket.
Ogni volta che l'applicazione esegue un'attività, un token viene rimosso dal bucket.
L'app continua a elaborare le attività nella coda finché il bucket della coda non rimane senza token. App Engine rifornisce continuamente il bucket con nuovi token in base al rate
specificato per la coda.
Se la coda contiene attività da elaborare e il relativo bucket contiene token, App Engine elabora contemporaneamente tutte le attività presenti nel bucket. Ciò può comportare picchi di elaborazione, consumare risorse di sistema e competere con le richieste di pubblicazione per gli utenti.
Se vuoi evitare l'esecuzione di troppe attività contemporaneamente o la contesa del data store, utilizza max_concurrent_requests
.
L'esempio seguente mostra come impostare max_concurrent_requests
per limitare le attività e come regolare la dimensione e la frequenza del bucket in base alle esigenze e alle risorse disponibili dell'applicazione:
queue:
- name: queue-blue
rate: 20/s
bucket_size: 40
max_concurrent_requests: 10
Impostazione di limiti di spazio di archiviazione per tutte le code
Puoi utilizzare il file di configurazione della coda per definire la quantità totale di spazio di archiviazione che i dati delle attività possono consumare in tutte le code. Per definire il limite di spazio di archiviazione totale, includi un elemento denominato total_storage_limit
al livello superiore:
# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
rate: 35/s
Il valore è un numero seguito da un'unità: B
per i byte, K
per i kilobyte, M
per i megabyte, G
per i gigabyte e T
per i terabyte. Ad esempio, 100K
specifica un limite di 100 kilobyte. Se l'aggiunta di un'attività causerebbe il superamento del limite di spazio di archiviazione della coda, la chiamata per l'aggiunta dell'attività non andrà a buon fine. Il limite predefinito è 500M
(500 megabyte) per le app gratuite. Per le app fatturate non esiste alcun limite finché non ne imposti uno esplicitamente. Puoi utilizzare questo limite per proteggere la tua app da un errore di programmazione di tipo fork
bomb, in cui ogni attività aggiunge più altre attività durante la sua
esecuzione.
Se la tua app riceve errori relativi a una quota insufficiente durante l'aggiunta di attività, può essere utile aumentare il limite di spazio di archiviazione totale. Se utilizzi questa funzionalità, ti consigliamo vivamente di impostare un limite che corrisponda allo spazio di archiviazione necessario per più giorni di attività. In questo modo è possibile eseguire il backup temporaneo delle code e continuare ad accettare nuove attività mentre si lavora al backlog, rimanendo al contempo protetti da un errore di programmazione della bomba fork.
Configurazione del numero massimo di richieste in parallelo
Puoi controllare la frequenza di elaborazione impostandomax_concurrent_requests
, che limita il numero di attività che possono essere eseguite contemporaneamente.
Se la coda dell'applicazione ha una frequenza di 20/s e una dimensione del bucket di 40, le attività in quella coda vengono eseguite a una frequenza di 20/s e possono aumentare brevemente fino a 40/s. Queste impostazioni funzionano bene se la latenza delle attività è relativamente bassa. Tuttavia, se la latenza aumenta in modo significativo, finirai per elaborare un numero molto maggiore di attività simultanee. Questo carico di elaborazione aggiuntivo può consumare istanze aggiuntive e rallentare l'applicazione.
Ad esempio, supponiamo che la normale latenza delle attività sia di 0,3 secondi. Con questa latenza, potrai elaborare al massimo circa 40 attività contemporaneamente. Tuttavia, se la latenza delle attività aumenta a 5 secondi, potresti facilmente avere più di 100 attività in elaborazione contemporaneamente. Questo aumento costringe l'applicazione a consumare più istanze per elaborare le attività aggiuntive, potenzialmente rallentando l'intera applicazione e interferendo con le richieste degli utenti. Puoi evitare questa possibilità impostando
max_concurrent_requests
su un valore inferiore.
Ad esempio, se imposti max_concurrent_requests
su 10, la nostra coda di esempio gestisce circa 20 attività al secondo quando la latenza è di 0,3 secondi.
Quando la latenza aumenta oltre 0,5 secondi, questa impostazione riduce la frequenza di elaborazione per garantire che non vengano eseguite più di 10 attività contemporaneamente.
queue:
# Set the max number of concurrent requests to 50
- name: optimize-queue
rate: 20/s
bucket_size: 40
max_concurrent_requests: 10
Monitoraggio delle code nella console Google Cloud
Nella console Google Cloud, vai alla pagina Cloud Tasks.
Tieni presente che se vai alla pagina Coda di lavoro di App Engine, troverai istruzioni che ti guideranno alla pagina Cloud Tasks. Questo aggiornamento nella console Google Cloud non modifica il funzionamento delle code di attività.
Abilita l'API Cloud Tasks.
Nella pagina Cloud Tasks viene visualizzato un elenco di tutte le code nell'applicazione. Se fai clic sul nome di una coda, viene visualizzata la pagina Dettagli coda, che mostra tutte le attività nella coda selezionata.
Passaggi successivi
Scopri di più sulla creazione di attività.