Questa pagina descrive come configurare le code di Cloud Tasks utilizzando il comando gcloud
di Google Cloud CLI.
Panoramica
Puoi configurare la coda di Cloud Tasks quando crei la coda o in qualsiasi momento successivo. La configurazione verrà applicata a tutte le attività in quella coda.
La configurazione delle code prevede tre aspetti di base:
Routing a livello di coda
La configurazione del routing a livello di coda sostituisce il routing impostato a livello di attività. Questo è utile se vuoi utilizzare Cloud Tasks come buffer per il servizio di destinazione o se devi modificare il routing per tutte le attività in una coda.
Il routing a livello di coda si applica a:
- Attività attualmente in coda
- Attività aggiunte alla coda dopo aver impostato il routing a livello di coda
Limitazioni
Il routing a livello di coda non è compatibile con le chiavi di crittografia gestite dal cliente (CMEK) di Cloud Key Management Service (Cloud KMS). Se CMEK è abilitata, non puoi:
- Creare attività su una coda con routing a livello di coda
- Applica il routing a livello di coda
Configurazione del routing a livello di coda per le attività HTTP
Applica il routing a livello di coda
Puoi configurare una coda in modo da eseguire l'override del routing a livello di attività durante la creazione o l'aggiornamento della coda. Per configurare il routing a livello di coda, imposta il parametro uriOverride
della coda sulla tua route preferita. Se applichi il routing a livello di coda come aggiornamento a una coda esistente, metti in pausa la coda prima di applicare le modifiche e attendi un minuto dopo l'applicazione delle modifiche per riprendere la coda. L'applicazione della nuova configurazione può richiedere fino a un minuto, quindi attendere il ripristino della coda contribuisce a impedire l'invio delle attività con la vecchia configurazione.
Aggiorna o rimuovi il routing a livello di coda
Metti in pausa la coda.
Console
Per mettere in pausa la coda utilizzando la console Google Cloud:
Apri la pagina delle code di Cloud Tasks nella console.
Seleziona il nome della coda da mettere in pausa e fai clic su Metti in pausa la coda.
Conferma l'azione.
gcloud
gcloud tasks queues pause QUEUE_ID
Sostituisci
QUEUE_ID
con l'ID della coda.Aggiorna o rimuovi il routing a livello di coda.
Per aggiornare il routing a livello di coda, imposta il parametro
uriOverride
sulla route aggiornata.Per rimuovere il routing a livello di coda utilizzando l'API REST o RPC:
API REST: invia una richiesta
patch
per la coda con un payload vuoto e il parametroupdateMask
impostato suhttpTarget
.API RPC: invia un messaggio
updateQueueRequest
per la coda con un payload vuoto e il parametroupdate_mask
impostato suhttp_target
.
L'esempio seguente utilizza l'API REST per aggiornare le attività host a cui vengono instradate:
curl -X PATCH -d @- -i \ -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID?updateMask=httpTarget.uriOverride" << EOF { "httpTarget": {"uriOverride":{"host":"NEW_HOST"}} } EOF
Sostituisci quanto segue:
PROJECT_ID
: l'ID del tuo progetto Google Cloud. Per farlo, esegui quanto segue nel terminale:gcloud config get-value project
LOCATION
: la posizione della coda.QUEUE_ID
: l'ID della coda.ACCESS_TOKEN
: il tuo token di accesso. Per farlo, esegui quanto segue nel terminale:gcloud auth application-default login
gcloud auth application-default print-access-token
NEW_HOST
: il nuovo host a cui vuoi instradare la coda.
Aspetta un minuto.
L'applicazione della nuova configurazione può richiedere fino a un minuto, quindi attendere il ripristino della coda contribuisce a impedire l'invio delle attività con la configurazione precedente.
Riprendi la coda.
Console
Per riprendere la coda utilizzando la console Google Cloud:
Apri la pagina delle code di Cloud Tasks nella console.
Seleziona il nome della coda da mettere in pausa e fai clic su Riprendi coda.
Conferma l'azione.
gcloud
gcloud tasks queues resume QUEUE_ID
Sostituisci
QUEUE_ID
con l'ID della coda.
Configura il routing a livello di coda per le attività di App Engine
Per configurare il routing a livello di coda per le attività di App Engine, imposta il parametro appEngineRoutingOverride
della coda sul servizio e sulla versione App Engine che preferisci.
Per configurare questo routing non predefinito a livello di coda e sostituire
qualsiasi routing a livello di attività, puoi utilizzare gcloud
:
gcloud tasks queues update QUEUE_ID\ --routing-override=service:SERVICE,version:VERSION
Sostituisci quanto segue:
SERVICE
: il servizio worker di App Engine responsabile della gestione delle attività.VERSION
: la versione dell'app.
Ad esempio, se configuri un servizio worker SERVICE per la gestione di tutte le attività in una coda, puoi eseguire il routing a quel servizio e alla versione predefinita:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE
Descrivi la coda:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Sostituisci quanto segue:
QUEUE_ID
: l'ID coda (il nome breve)LOCATION
: la posizione della coda
L'output dovrebbe essere simile al seguente:
appEngineRoutingOverride: host: SERVICE.PROJECT_ID.appspot.com service: SERVICE name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: 1000 maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Rimuovi il routing a livello di coda per le destinazioni App Engine
Quando viene rimosso il routing a livello di coda, il routing a livello di attività si applica sia alle attività attualmente in coda sia alle attività aggiunte alla coda in futuro. Per rimuovere il routing a livello di coda, esegui questo comando:
gcloud tasks queues update QUEUE_ID \ --clear-routing-override
Definire i limiti di frequenza
Puoi impostare la frequenza massima e il numero di attività simultanee che possono essere inviate da una coda.
gcloud tasks queues update QUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_RUNNING
Sostituisci quanto segue:
DISPATCH_RATE
: la frequenza di spedizione (ovvero la frequenza con cui vengono aggiornati i token nel bucket). Nelle condizioni in cui il flusso di attività è relativamente costante, questa è l'equivalente della frequenza di invio delle attività.MAX_RUNNING
: numero massimo di attività in coda che possono essere eseguite contemporaneamente.
Ad esempio, se hai creato una coda senza impostare parametri, puoi aggiornare il numero massimo di attività simultanee chiamando:
gcloud tasks queues update QUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Describe
la coda:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Sostituisci quanto segue:
QUEUE_ID
: l'ID coda (il nome breve)LOCATION
: la posizione della coda
L'output dovrebbe essere:
name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: MAX_CONCURRENT_DISPATCHES maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Definizione delle frequenze di elaborazione utilizzando i comandi gcloud
rispetto all'utilizzo di queue.yaml
L'approccio dell'API Cloud Tasks per definire le velocità di elaborazione delle code è leggermente diverso da quello adottato con il caricamento dei file queue.yaml
, anche se entrambi i metodi comportano l'utilizzo dello stesso meccanismo sottostante per generare code.
In entrambi i casi, la coda utilizza l'algoritmo del bucket token per controllare la frequenza di esecuzione dell'attività. Ogni coda denominata ha un bucket che contiene i token.
Ogni volta che l'applicazione esegue un'attività, un token viene rimosso dal bucket.
La coda continua a elaborare le attività fino
a quando il bucket non esaurisce i token. Il sistema ricarica il bucket con nuovi token continuamente in base alla tariffa di max_dispatches_per_second
specificata per la coda. Se la coda contiene attività da elaborare e il bucket della coda contiene token, il sistema elabora contemporaneamente tante attività quante sono i token, fino al valore max_concurrent_dispatches
che hai impostato.
Il carico non uniforme può consentire un aumento significativo del numero di token nel bucket, il che può portare a burst di elaborazione quando arriva un burst di richieste. In questo caso, la coda potrebbe riscontrare una frequenza di invio effettiva che supera la frequenza di max_dispatches_per_second
, consumando risorse di sistema e entrando in competizione con le richieste di pubblicazione degli utenti. Nei casi in cui utilizzi code per gestire le tariffe di invio in base a SLA (accordi sul livello del servizio) relativamente lenti per i servizi downstream, ciò può causare errori come HTTP 429
(troppe richieste) o 503
(servizio non disponibile).
Quando utilizzi qualsiasi metodo dell'API Cloud Tasks, hai due campi per definire la frequenza di invio della coda:
max_dispatches_per_second
max_concurrent_dispatches
Un terzo campo, max_burst_size
, viene calcolato dal sistema in base al valore impostato per max_dispatches_per_second
.
Quando utilizzi il metodo queue.yaml
, puoi impostare tutti e tre gli elementi:
max_concurrent_requests
, che equivale amax_concurrent_dispatches
rate
, che equivale amax_dispatches_per_second
bucket_size
, che equivale amax_burst_size
Nella maggior parte dei casi, l'utilizzo del metodo API Cloud Tasks e l'utilizzo di max_burst_size
da parte del sistema producono una frequenza molto efficiente per la gestione dei burst delle richieste. In alcuni casi, tuttavia, in particolare quando la frequenza desiderata è relativamente lenta, puoi utilizzare il metodo queue.yaml
per impostare manualmente bucket_size
su un valore basso o impostare max_concurrent_dispatches
su un valore basso tramite l'API Cloud Tasks per avere un maggiore controllo.
Imposta i parametri di ripetizione
Se un'attività non viene completata correttamente, Cloud Tasks la riproverà con un backoff esponenziale in base ai parametri impostati. Puoi specificare il numero massimo di volte in cui ritentare le attività non riuscite nella coda, impostare un limite di tempo per i nuovi tentativi e controllare l'intervallo tra i tentativi.
gcloud tasks queues update QUEUE_ID \ --max-attempts=MAX_ATTEMPTS \ --min-backoff=MIN_INTERVAL \ --max-backoff=MAX_INTERVAL \ --max-doublings=MAX_DOUBLINGS \ --max-retry-duration=MAX_RETRY_DURATION
Sostituisci quanto segue:
MAX_ATTEMPTS
: il numero massimo di tentativi per un'attività, incluso il primo. Puoi consentire un numero illimitato di tentativi impostando questo flag suunlimited
.MIN_INTERVAL
: il tempo minimo di attesa tra un nuovo tentativo e l'altro. Il valore deve essere una stringa che termina con "s", come5s
.MAX_INTERVAL
: il tempo massimo di attesa tra un nuovo tentativo e l'altro. Il valore deve essere una stringa che termina con "s", come5s
.MAX_DOUBLINGS
: il numero massimo di volte in cui l'intervallo tra i nuovi tentativi di attività non riuscite verrà raddoppiato prima che l'aumento diventi costante.MAX_RETRY_DURATION
: il tempo massimo per riprovare un'attività non riuscita misurato dal momento in cui è stato eseguito il primo tentativo dell'attività. Il valore deve essere una stringa che termina con "s", come5s
.
Verifica che la coda sia stata configurata correttamente:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Sostituisci quanto segue:
QUEUE_ID
: l'ID coda (il nome breve)LOCATION
: la posizione della coda
Passaggi successivi
- Scopri di più sulla creazione di attività di destinazione HTTP.
- Scopri come creare attività di App Engine.
- Scopri di più sulla configurazione di Cloud Logging.
- Scopri di più sulla gestione delle code nel riferimento dell'API RPC.
- Scopri di più sulla gestione delle code nel riferimento dell'API REST.
- Consulta l'elenco completo dei comandi
gcloud
di Cloud Tasks.