Questa pagina descrive come configurare le code di Cloud Tasks utilizzando il comando gcloud
di Google Cloud CLI.
Panoramica
Puoi configurare la coda Cloud Tasks quando la crei o in qualsiasi momento successivo e la configurazione verrà applicata a tutte le attività al suo interno.
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à. Questa opzione è utile se vuoi utilizzare Cloud Tasks come buffer davanti al servizio di destinazione o se devi modificare il routing per tutte le attività di una coda.
Il routing a livello di coda si applica a:
- Attività attualmente in coda
- Attività aggiunte alla coda dopo che è stato impostato il routing a livello di coda
Limitazioni
Il routing a livello di coda non è compatibile con Cloud Key Management Service (Cloud KMS) e le chiavi di crittografia gestite dal cliente (CMEK). Se la CMEK è abilitata, non puoi:
- Creare attività in una coda con routing a livello di coda
- Applica il routing a livello di coda
Configura il routing a livello di coda per le attività HTTP
Applica il routing a livello di coda
Puoi configurare una coda per ignorare il routing a livello di attività durante la creazione
la coda o durante l'aggiornamento della coda. Per configurare il routing a livello di coda, imposta il valore
della coda
uriOverride
al tuo percorso preferito. Se stai applicando 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 averle applicate per riprendere la coda. L'applicazione della nuova configurazione può richiedere fino a un minuto, pertanto attendere di riprendere la coda consente di evitare l'invio delle attività con la vecchia configurazione.
Aggiornare o rimuovere il routing a livello di coda
Metti in pausa la coda.
Per mettere in pausa la coda utilizzando la console Google Cloud:
Apri la pagina Code di Cloud Tasks nella console.
Seleziona il nome della coda che vuoi mettere in pausa e fai clic su Metti in pausa coda.
Conferma l'azione.
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
sul percorso aggiornato.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à dell'host instradate a:
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 "}} } EOFSostituisci quanto segue:
PROJECT_ID
: l'ID del tuo progetto Google Cloud. Puoi ottenerlo eseguendo il comando seguente 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. Puoi trovarla esegui questo comando nel tuo terminale:gcloud auth application-default login
gcloud auth application-default print-access-token
NEW_HOST
: il nuovo host a cui vuoi inoltrare la coda.
Aspetta un minuto.
L'applicazione della nuova configurazione può richiedere fino a un minuto, quindi l'attesa per riprendere la coda consente di evitare l'invio delle attività con la vecchia configurazione.
Riprendi la coda.
Per riprendere la coda utilizzando la console Google Cloud:
Apri la pagina code di Cloud Tasks nella console.
Seleziona il nome della coda che vuoi mettere in pausa e fai clic su Riprendi coda.
Conferma l'azione.
gcloud tasks queues resume
QUEUE_ID Sostituisci
QUEUE_ID
con l'ID della coda.
Configurare il routing a livello di coda per le attività 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 di App Engine che preferisci.
Per configurare questo routing non predefinito a livello di coda ed eseguire l'override
routing a livello di attività, puoi utilizzare gcloud
:
gcloud tasks queues updateQUEUE_ID \ --routing-override=service:SERVICE ,version:VERSION
Sostituisci quanto segue:
SERVICE
: il servizio di lavoro App Engine responsabile della gestione delle attività.VERSION
: la versione dell'app.
Ad esempio, se configuri un servizio di lavoro SERVICE per gestire tutte le attività in una coda, puoi indirizzare le richieste a quel servizio e alla versione predefinita:
gcloud tasks queues updateQUEUE_ID \ --routing-override=service:SERVICE
Descrivi la coda:
gcloud tasks queues describeQUEUE_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 di App Engine
Quando il routing a livello di coda viene rimosso, il routing a livello di attività si applica sia alle attività attualmente in coda sia a quelle aggiunte in futuro. Per rimuovere a livello di coda, esegui questo comando:
gcloud tasks queues updateQUEUE_ID \ --clear-routing-override
Definire i limiti di frequenza
Puoi impostare la frequenza massima e il numero di attività in parallelo che possono essere inviate da una coda.
gcloud tasks queues updateQUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_RUNNING
Sostituisci quanto segue:
DISPATCH_RATE
: la frequenza di invio (ovvero la frequenza con cui vengono aggiornati i token nel bucket). In condizioni in cui è presente un flusso relativamente costante di attività, questo valore è equivalente alla frequenza con cui le attività vengono inviate.MAX_RUNNING
: il numero massimo di attività in coda che possono essere eseguiti contemporaneamente.
Ad esempio, se hai creato una coda senza impostare parametri, puoi aggiornare il numero massimo di attività in parallelo chiamando:
gcloud tasks queues updateQUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Describe
la coda:
gcloud tasks queues describeQUEUE_ID --location=LOCATION
Sostituisci quanto segue:
QUEUE_ID
: l'ID coda (il nome breve)LOCATION
: 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 tariffe di elaborazione utilizzando i comandi gcloud
rispetto all'utilizzo di queue.yaml
L'approccio dell'API Cloud Tasks per definire le frequenze di elaborazione delle code differisce leggermente dall'approccio adottato utilizzando il caricamento dei file queue.yaml
, anche se entrambi i metodi generano code che utilizzano lo stesso meccanismo di base.
In entrambi i casi, la coda utilizza il bucket token per controllare la frequenza di esecuzione delle attività. Ogni coda denominata ha un un bucket che contiene i suoi token.
Ogni volta che l'applicazione esegue un'attività, un token viene rimosso dal bucket.
La coda continua a elaborare le attività finché il bucket non rimane senza token. Il sistema rifornisce continuamente il bucket con nuovi token in base alla frequenza 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 tutte le attività presenti, fino al valore max_concurrent_dispatches
impostato.
Un carico non uniforme può consentire un aumento significativo del numero di token nel bucket,
con conseguente picco di elaborazione quando arriva un picco di richieste. Nel
in questo caso, la coda potrebbe registrare una frequenza di invio effettiva che
supera la tua tariffa max_dispatches_per_second
, consumando risorse di sistema e
in concorrenza con le richieste di pubblicazione degli utenti. Nei casi in cui utilizzi le code per
gestire le frequenze 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
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 dell'API Cloud Tasks e il lasciare che il sistema imposti max_burst_size
genera una frequenza molto efficiente per la gestione delle richieste. In alcuni casi, tuttavia, in particolare quando si desidera
è relativamente lenta, utilizzando il metodo queue.yaml
per impostare manualmente
bucket_size
su un valore basso o impostando max_concurrent_dispatches
su
un piccolo valore tramite l'API Cloud Tasks può darti maggiore controllo.
Imposta i parametri di ripetizione
Se un'attività non viene completata correttamente, Cloud Tasks proverà di nuovo. l'attività con backoff esponenziale in base ai parametri che hai impostato. Puoi specificare il numero massimo di volte per ripetere i tentativi per le attività non riuscite nella coda, impostare un limite di tempo per i tentativi di nuovo esecuzione e controllare l'intervallo tra i tentativi.
gcloud tasks queues updateQUEUE_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à, inclusi al primo tentativo. 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", ad esempio5s
.MAX_INTERVAL
: il tempo massimo da attendere tra un tentativo di nuovo esecuzione e l'altro. Il valore deve essere una stringa che termina con "s", ad esempio5s
.MAX_DOUBLINGS
: il numero massimo di volte in cui l'intervallo tra i nuovi tentativi di attività non riuscite sarà raddoppiato prima dell'aumento diventa costante.MAX_RETRY_DURATION
: il tempo massimo per eseguire nuovamente un'attività non riuscita, misurato dal primo tentativo eseguito per l'attività. Il valore deve essere una stringa che termina con "s", ad esempio5s
.
Verifica che la coda sia stata configurata correttamente:
gcloud tasks queues describeQUEUE_ID --location=LOCATION
Sostituisci quanto segue:
QUEUE_ID
: l'ID coda (il nome breve)LOCATION
: posizione della coda
Passaggi successivi
- Scopri come creare attività target HTTP.
- Scopri di più sulla creazione di 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.