Creazione di code in modalità push

Questa pagina descrive come creare e personalizzare una coda in modalità push e come esaminarne i contenuti.

Utilizzo di un file di configurazione delle code per la creazione di code

Per elaborare un'attività, devi aggiungerla a una coda in modalità push. App Engine fornisce una coda in modalità push predefinita, denominata default, configurata e pronta per essere utilizzata 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 cambiare la configurazione predefinita, modifica il file di configurazione della coda per l'applicazione, che carichi in App Engine. Puoi creare fino a 100 code. Le code non possono essere create in modo dinamico.

Il 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 target v2.task-module. La frequenza di aggiornamento di queue-red viene modificata da 5/s a 1/s. Le attività verranno rimosse dalla coda e inviate alle rispettive destinazioni alla frequenza di 1 attività al secondo.

Se elimini una coda, devi attendere circa 7 giorni prima di creare una nuova coda 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 il riferimento al file di configurazione delle code.

Definizione della velocità di elaborazione delle coda in modalità push

Puoi controllare la frequenza con cui le attività vengono elaborate in ciascuna delle tue code definendo altre istruzioni, 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 massimo specificato dal 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à in coda fino a quando il bucket della coda non esaurisce i token. App Engine ricarica il bucket con nuovi token in modo continuo, in base al rate che hai specificato per la coda.

Se la coda contiene attività da elaborare e il bucket della coda contiene token, App Engine elabora contemporaneamente tante attività quante sono. Ciò può portare a burst di elaborazione, consumo di risorse di sistema e concorrenza con le richieste di gestione degli utenti.

Se vuoi impedire l'esecuzione di troppe attività contemporaneamente o impedire la contesa del datastore, utilizza max_concurrent_requests.

Il seguente esempio mostra come impostare max_concurrent_requests per limitare le attività e mostra anche come regolare le dimensioni e la frequenza del bucket in base alle esigenze della tua applicazione e alle risorse disponibili:

queue:
- name: queue-blue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Impostazione dei 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 utilizzare per tutte le code. Per definire il limite di spazio di archiviazione totale, includi un elemento denominato total_storage_limit al livello più alto:

# 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 gigabyte, T per i terabyte. Ad esempio, 100K specifica un limite di 100 kilobyte. Se l'aggiunta di un'attività causa il superamento del limite di archiviazione della coda, la chiamata per aggiungere l'attività non andrà a buon fine. Il limite predefinito è 500M (500 megabyte) per le app gratuite. Per le app fatturate non c'è alcun limite finché non ne imposti esplicitamente uno. Puoi utilizzare questo limite per proteggere la tua app da un errore di programmazione fork bomb in cui ogni attività aggiunge diverse altre attività durante l'esecuzione.

Se la tua app riceve errori relativi a una quota insufficiente durante l'aggiunta di attività, prova ad 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 le attività di diversi giorni. In questo modo è possibile eseguire temporaneamente il backup delle code e continuare ad accettare nuove attività mentre si lavora nell'arretrato, pur restando protette da un errore di programmazione di una fork bomb.

Configurazione del numero massimo di richieste in parallelo

Puoi controllare la frequenza di elaborazione impostando max_concurrent_requests, che limita il numero di attività eseguibili contemporaneamente.

Se la coda dell'applicazione ha una frequenza di 20/s e una dimensione del bucket pari a 40, le attività in tale coda vengono eseguite a una velocità di 20/s e possono eseguire burst fino a 40/s per breve tempo. Queste impostazioni funzionano bene se la latenza delle attività è relativamente bassa; tuttavia, se la latenza aumenta in modo significativo, l'elaborazione di attività simultanee è notevolmente maggiore. Questo carico di elaborazione aggiuntivo può consumare altre istanze e rallentare l'applicazione.

Ad esempio, supponiamo che la normale latenza delle attività sia di 0,3 secondi. Con questa latenza, elaborerai al massimo circa 40 attività contemporaneamente. Tuttavia, se la latenza delle attività aumenta a 5 secondi, è possibile che vengano elaborate facilmente più di 100 attività alla volta. Questo aumento costringe la tua applicazione a consumare più istanze per elaborare le attività aggiuntive, rallentando potenzialmente l'intera applicazione e interferendo con le richieste degli utenti. Puoi evitare questa possibilità impostando max_concurrent_requests su un valore più basso.

Ad esempio, se imposti max_concurrent_requests su 10, la nostra coda di esempio mantiene circa 20 attività al secondo quando la latenza è di 0,3 secondi. Quando la latenza aumenta oltre 0,5 secondi, questa impostazione limita la velocità di elaborazione per garantire che non più di 10 attività vengano eseguite contemporaneamente.

queue:
# Set the max number of concurrent requests to 50
- name: optimize-queue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Code di monitoraggio nella console Google Cloud

  1. Nella console Google Cloud, vai alla pagina Cloud Tasks.

    Vai a Cloud Tasks

    Tieni presente che se vai alla pagina Coda di attività di App Engine, saranno presenti istruzioni che ti guideranno nella pagina Cloud Tasks. Questo aggiornamento nella console Google Cloud non modifica il funzionamento delle code di attività.

  2. Abilitare l'API Cloud Tasks.

  3. Nella pagina Cloud Tasks, vedrai 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à.