Configurer les files d'attente Cloud Tasks

Cette page explique comment configurer des files d'attente Cloud Tasks à l'aide de la commande gcloud de la Google Cloud CLI.

Présentation

Vous pouvez configurer votre file d'attente Cloud Tasks à sa création ou à tout moment ultérieur. La configuration s'appliquera à toutes les tâches de cette file d'attente.

La configuration des files d'attente comporte trois aspects fondamentaux :

Routage au niveau de la file d'attente

La configuration du routage au niveau de la file d'attente remplace le routage défini au niveau de la tâche. Cela est utile si vous souhaitez utiliser Cloud Tasks comme tampon devant votre service cible ou si vous devez modifier le routage de toutes les tâches d'une file d'attente.

Le routage au niveau de la file d'attente s'applique aux éléments suivants:

  • Tâches actuellement dans la file d'attente
  • Tâches ajoutées à la file d'attente une fois le routage au niveau de la file d'attente défini

Limites

Le routage au niveau de la file d'attente n'est pas compatible avec les clés de chiffrement gérées par le client (CMEK) de Cloud Key Management Service (Cloud KMS). Si les CMEK sont activées, vous ne pouvez pas:

  • Créer des tâches dans une file d'attente disposant d'un routage au niveau de la file d'attente
  • Appliquer un routage au niveau de la file d'attente

Configurer le routage au niveau de la file d'attente pour les tâches HTTP

Appliquer un routage au niveau de la file d'attente

Vous pouvez configurer une file d'attente pour remplacer le routage au niveau d'une tâche lors de sa création ou de sa mise à jour. Pour configurer le routage au niveau de la file d'attente, définissez le paramètre uriOverride de la file d'attente sur votre route préférée. Si vous appliquez un routage au niveau de la file d'attente en tant que mise à jour d'une file d'attente existante, suspendez la file d'attente avant d'appliquer les modifications et attendez une minute après l'application des modifications pour reprendre la file d'attente. La prise en compte de la nouvelle configuration peut prendre jusqu'à une minute. Par conséquent, le fait d'attendre la reprise de la file d'attente permet d'empêcher la distribution des tâches avec l'ancienne configuration.

Mettre à jour ou supprimer le routage au niveau de la file d'attente

  1. Suspendez la file d'attente.

    Console

    Pour suspendre votre file d'attente à l'aide de la console Google Cloud:

    1. Ouvrez la page des files d'attente Cloud Tasks dans la console.

      Accéder à la page des files d'attente Cloud Tasks

    2. Sélectionnez le nom de la file d'attente que vous souhaitez suspendre, puis cliquez sur Suspendre la file d'attente.

    3. Confirmez l'opération.

    gcloud

    gcloud tasks queues pause QUEUE_ID
    

    Remplacez QUEUE_ID par l'ID de votre file d'attente.

  2. Mettez à jour ou supprimez le routage au niveau de la file d'attente.

    • Pour mettre à jour le routage au niveau de la file d'attente, définissez le paramètre uriOverride sur votre route mise à jour.

    • Pour supprimer le routage au niveau de la file d'attente à l'aide de l'API REST ou RPC:

      • API REST:envoyez une requête patch pour la file d'attente avec une charge utile vide et le paramètre updateMask défini sur httpTarget.

      • API RPC:envoyez une updateQueueRequest pour la file d'attente avec une charge utile vide et le paramètre update_mask défini sur http_target.

    L'exemple suivant utilise l'API REST pour mettre à jour les tâches hôtes vers lesquelles sont acheminées:

    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
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud. Vous pouvez l'obtenir en exécutant la commande suivante dans votre terminal:
      gcloud config get-value project
    • LOCATION: emplacement de votre file d'attente.
    • QUEUE_ID: ID de votre file d'attente.
    • ACCESS_TOKEN: votre jeton d'accès. Vous pouvez l'obtenir en exécutant la commande suivante dans votre terminal:

      1. gcloud auth application-default login
      2. gcloud auth application-default print-access-token
    • NEW_HOST: nouvel hôte vers lequel vous souhaitez que votre file d'attente soit acheminée.

  3. Attendez une minute.

    La prise en compte de la nouvelle configuration peut prendre jusqu'à une minute. Attendre la reprise de la file d'attente permet donc d'empêcher la distribution des tâches avec l'ancienne configuration.

  4. Réactivez la file d'attente.

    Console

    Pour réactiver votre file d'attente à l'aide de la console Google Cloud:

    1. Ouvrez la page des files d'attente Cloud Tasks dans la console.

      Accéder à la page des files d'attente Cloud Tasks

    2. Sélectionnez le nom de la file d'attente que vous souhaitez suspendre, puis cliquez sur Réactiver la file d'attente.

    3. Confirmez l'opération.

    gcloud

    gcloud tasks queues resume QUEUE_ID
    

    Remplacez QUEUE_ID par l'ID de votre file d'attente.

Configurer le routage au niveau de la file d'attente pour les tâches App Engine

Pour configurer le routage au niveau de la file d'attente pour les tâches App Engine, définissez le paramètre appEngineRoutingOverride de la file d'attente sur le service et la version App Engine de votre choix.

Pour configurer ce routage au niveau de la file d'attente autre que celui par défaut et remplacer tout routage au niveau des tâches, vous pouvez utiliser gcloud:

  gcloud tasks queues update QUEUE_ID\
      --routing-override=service:SERVICE,version:VERSION

Remplacez les éléments suivants :

  • SERVICE: service de nœuds de calcul App Engine responsable de la gestion des tâches.
  • VERSION: version de l'application.

Par exemple, si vous configurez un service de nœud de calcul SERVICE pour gérer toutes les tâches d'une file d'attente, vous pouvez acheminer le trafic vers ce service et vers la version par défaut:

  gcloud tasks queues update QUEUE_ID \
      --routing-override=service:SERVICE

Décrivez la file d'attente:

    gcloud tasks queues describe QUEUE_ID --location=LOCATION

Remplacez les éléments suivants :

  • QUEUE_ID: ID de la file d'attente (son nom court)
  • LOCATION: emplacement de la file d'attente.

Un résultat semblable aux lignes suivantes doit s'afficher :

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

Supprimer le routage au niveau de la file d'attente pour les cibles App Engine

Lorsque le routage au niveau de la file d'attente est supprimé, le routage au niveau de la tâche s'applique à la fois aux tâches qui se trouvent actuellement dans la file d'attente et à celles qui y seront ajoutées ultérieurement. Pour supprimer le routage au niveau de la file d'attente, exécutez la commande suivante:

  gcloud tasks queues update QUEUE_ID \
      --clear-routing-override

Définir des limites de débit

Vous pouvez définir le débit maximal et le nombre de tâches simultanées pouvant être envoyées par une file d'attente.

  gcloud tasks queues update QUEUE_ID \
      --max-dispatches-per-second=DISPATCH_RATE \
      --max-concurrent-dispatches=MAX_RUNNING

Remplacez les éléments suivants :

  • DISPATCH_RATE: taux de distribution (taux d'actualisation des jetons dans le bucket). Dans les conditions où le flux de tâches est relativement régulier, il s'agit de l'équivalent du taux de distribution des tâches.
  • MAX_RUNNING: nombre maximal de tâches de la file d'attente pouvant être exécutées simultanément.

Par exemple, si vous avez créé une file d'attente sans définir de paramètre, vous pouvez mettre à jour le nombre maximal de tâches simultanées en appelant la commande suivante:

  gcloud tasks queues update QUEUE_ID \
          --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES

Décrivez (Describe) la file d'attente :

  gcloud tasks queues describe QUEUE_ID --location=LOCATION

Remplacez les éléments suivants :

  • QUEUE_ID: ID de la file d'attente (son nom court)
  • LOCATION: emplacement de la file d'attente.

Un résultat semblable aux lignes suivantes doit s'afficher :

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

Définir les taux de traitement avec les commandes gcloud et avec queue.yaml

L'approche de l'API Cloud Tasks pour définir les taux de traitement des files d'attente diffère légèrement de celle recourant à l'importation de fichiers queue.yaml, même si les deux méthodes aboutissent à des files d'attente utilisant le même mécanisme sous-jacent.

Dans les deux cas, la file d'attente utilise l'algorithme de token bucket (seau à jetons) pour contrôler le taux d'exécution des tâches. Chaque file d'attente nommée possède un bucket contenant ses jetons.

Chaque fois que l'application exécute une tâche, un jeton est supprimé du bucket. La file d'attente continue de traiter les tâches jusqu'à ce que le bucket n'ait plus de jetons. Le système remplit le bucket avec de nouveaux jetons en continu, en fonction du taux max_dispatches_per_second que vous spécifiez pour la file d'attente. Si votre file d'attente contient des tâches à traiter et que le bucket contient des jetons, le système traite simultanément autant de tâches que de jetons jusqu'à la valeur max_concurrent_dispatches que vous avez définie.

Une charge inégale peut augmenter considérablement le nombre de jetons dans le bucket, ce qui peut entraîner des utilisations intensives du traitement lorsqu'une vague de requêtes arrive. Dans ce cas, votre file d'attente peut présenter un taux de distribution réel supérieur à votre taux max_dispatches_per_second, consommant des ressources système et entrant en concurrence avec les requêtes servant les utilisateurs. Si vous utilisez des files d'attente pour gérer des taux de distribution basés sur des contrats de niveau de service relativement lents pour des services en aval, vous pouvez obtenir des erreurs telles que HTTP 429 (Trop de demandes) ou 503 (Service non disponible).

Lorsque vous utilisez une méthode impliquant l'API Cloud Tasks, vous disposez de deux champs pour définir le taux de distribution de la file d'attente :

  • max_dispatches_per_second
  • max_concurrent_dispatches

Un troisième champ, max_burst_size, est calculé par le système en fonction de la valeur que vous avez définie pour max_dispatches_per_second.

Lorsque vous utilisez la méthode queue.yaml, vous pouvez définir les trois éléments :

  • max_concurrent_requests, qui équivaut à max_concurrent_dispatches
  • rate, qui équivaut à max_dispatches_per_second
  • bucket_size, qui équivaut à max_burst_size

Dans la plupart des cas, l'utilisation de la méthode de l'API Cloud Tasks et la définition de max_burst_size par le système permettent d'obtenir un taux très efficace de gestion des vagues de requêtes. Toutefois, dans certains cas, en particulier lorsque le taux souhaité est relativement lent, utilisez la méthode queue.yaml pour définir manuellement bucket_size sur une petite valeur ou définir max_concurrent_dispatches sur une petite valeur via l'API Cloud Tasks peut vous donner plus de contrôle.

Définir les paramètres de nouvelle tentative

Si une tâche ne s'effectue pas correctement, Cloud Tasks la relance avec un intervalle exponentiel entre les tentatives en fonction des paramètres que vous avez définis. Vous pouvez spécifier le nombre maximum de nouvelles tentatives liées aux tâches ayant échoué dans la file d'attente, définir une limite de temps pour les nouvelles tentatives et contrôler l'intervalle entre les tentatives.

  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

Remplacez les éléments suivants :

  • MAX_ATTEMPTS: nombre maximal de tentatives pour une tâche, y compris la première tentative. Vous pouvez autoriser des tentatives illimitées en définissant cette option sur unlimited.
  • MIN_INTERVAL: délai d'attente minimal entre les nouvelles tentatives. La valeur doit être une chaîne qui se termine par "s", telle que 5s.
  • MAX_INTERVAL: délai maximal d'attente entre les nouvelles tentatives. La valeur doit être une chaîne qui se termine par "s". Par exemple : 5s.
  • MAX_DOUBLINGS: nombre maximal de fois où l'intervalle entre les tentatives d'exécution de tâches ayant échoué est doublé avant que l'augmentation ne devienne constante.
  • MAX_RETRY_DURATION: durée maximale d'une nouvelle tentative d'exécution d'une tâche ayant échoué, mesurée à partir du moment où elle a été effectuée pour la première fois. La valeur doit être une chaîne qui se termine par "s", par exemple 5s.

Vérifiez que la file d'attente a bien été configurée :

    gcloud tasks queues describe QUEUE_ID --location=LOCATION

Remplacez les éléments suivants :

  • QUEUE_ID: ID de la file d'attente (son nom court)
  • LOCATION: emplacement de la file d'attente.

Étapes suivantes