Configura le code di Cloud Tasks

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à. Ciò è utile se vuoi utilizzare Cloud Tasks come buffer davanti del servizio di destinazione o se devi modificare il routing per tutte le attività in 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 le chiavi di crittografia gestite dal cliente (CMEK) di Cloud Key Management Service (Cloud KMS). Se la CMEK è abilitata, non puoi:

  • Creare attività in una coda con routing a livello di coda
  • Applicare il routing a livello di coda

Configurare il routing a livello di coda per le attività HTTP

Applica il routing a livello di coda

Puoi configurare una coda per 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 sul percorso che preferisci. 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. Può richiedere a un minuto affinché la nuova configurazione abbia effetto. È quindi in attesa che venga ripristinata aiuta a impedire l'invio delle attività con la vecchia configurazione.

Aggiornare o rimuovere il routing a livello di coda

  1. Metti in pausa la coda.

    Console

    Per mettere in pausa la coda utilizzando la console Google Cloud:

    1. Apri la pagina code di Cloud Tasks nella console.

      Vai alla pagina Code di Cloud Tasks

    2. Seleziona il nome della coda che vuoi mettere in pausa e fai clic su Metti in pausa coda.

    3. Conferma l'azione.

    gcloud

    gcloud tasks queues pause QUEUE_ID

    Sostituisci QUEUE_ID con l'ID della coda.

  2. Aggiorna o rimuovi il routing a livello di coda.

    • Per aggiornare il routing a livello di coda, imposta il valore uriOverride al percorso aggiornato.

    • Per rimuovere il routing a livello di coda utilizzando l'API REST o RPC:

      • API REST: invia un patch richiesta per la coda con un payload vuoto e il parametro updateMask impostato su httpTarget.

      • API RPC: invia un updateQueueRequest per la coda con un payload vuoto e il parametro update_mask impostato su http_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"}}
    }
    EOF

    Sostituisci 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 ottenere questo valore eseguendo il seguente comando nel terminale:

      1. gcloud auth application-default login
      2. gcloud auth application-default print-access-token
    • NEW_HOST: il nuovo host che deve essere instradato alla coda a.

  3. Aspetta un minuto.

    L'applicazione della nuova configurazione può richiedere fino a un minuto, quindi l'attesa per riprendere la coda aiuta a impedire l'invio delle attività con configurazione precedente.

  4. Riprendi la coda.

    Console

    Per riprendere la coda utilizzando la console Google Cloud:

    1. Apri la pagina code di Cloud Tasks nella console.

      Vai alla pagina delle code di Cloud Tasks

    2. Seleziona il nome della coda che vuoi mettere in pausa e fai clic su Riprendi coda.

    3. 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 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 update QUEUE_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 worker SERVICE per gestire tutti 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: ID coda (il nome breve)
  • LOCATION: 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 viene rimosso il routing a livello di coda, il routing a livello di attività si applica sia alle attività attualmente in coda e attività aggiunte alla coda in futuro. Per rimuovere 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 e il numero massimo 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 tariffa di spedizione (ossia la frequenza di aggiornamento dei token nel bucket). Nel in cui il flusso di attività è relativamente costante, si tratta equivalente alla frequenza di invio delle attività.
  • 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 aggiorna 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: 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 velocità di elaborazione utilizzando i comandi gcloud anziché queue.yaml

Approccio dell'API Cloud Tasks per la definizione delle frequenze di elaborazione delle code leggermente diverso dall'approccio adottato per il caricamento queue.yaml, anche se entrambi i metodi comportano l'utilizzo dello stesso codice in code meccanismo sottostante.

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 riempie il bucket con nuovi token basati continuamente alla tariffa 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. il che può portare a burst di elaborazione quando arriva un burst di richieste. In questo caso, la coda potrebbe avere una frequenza di invio effettiva che supera la frequenza max_dispatches_per_second, consumando risorse di sistema e competendo con le richieste di pubblicazione per gli 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 per max_dispatches_per_second.

Quando utilizzi il metodo queue.yaml, puoi impostare tutti e tre gli elementi:

  • max_concurrent_requests, che equivale a max_concurrent_dispatches
  • rate, che equivale a max_dispatches_per_second
  • bucket_size, che equivale a max_burst_size

Nella maggior parte dei casi, utilizzando il metodo dell'API Cloud Tasks e consentendo il set di sistemi max_burst_size produce una tariffa molto efficiente per la gestione delle richieste serie di foto a raffica. 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. Tu specificare il numero massimo di volte per riprovare le attività non riuscite in coda, impostare un limite di tempo per i nuovi tentativi e controlla l'intervallo tra un tentativo e l'altro.

  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à, inclusi al primo tentativo. Puoi consentire un numero illimitato di tentativi impostando questo flag su unlimited.
  • 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 esempio 5s.
  • MAX_INTERVAL: il tempo massimo di attesa tra un nuovo tentativo e l'altro. Il valore deve essere una stringa che termina con "s", come 5s.
  • MAX_DOUBLINGS: il numero massimo di volte in cui l'intervallo tra i tentativi di attività non riuscita verrà raddoppiato prima che l'aumento diventi costante.
  • MAX_RETRY_DURATION: la quantità di tempo massima per nuovo tentativo di un'attività non riuscita misurata dal momento in cui è stata tentata per la prima volta. Il valore deve essere una stringa che termina con "s", ad esempio 5s.

Verifica che la coda sia stata configurata correttamente:

    gcloud tasks queues describe QUEUE_ID --location=LOCATION

Sostituisci quanto segue:

  • QUEUE_ID: ID coda (il nome breve)
  • LOCATION: posizione della coda

Passaggi successivi