Vous pouvez configurer votre file d'attente Cloud Tasks à sa création ou à tout moment ultérieur. La configuration s'applique à toutes les tâches de cette file d'attente.
La configuration des files d'attente comporte trois aspects fondamentaux :
Configurer le routage au niveau de la file d'attente
La configuration du routage au niveau de la file d'attente remplace celle définie au niveau de la tâche. Cela peut être 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 dans la file d'attente
- Tâches ajoutées à la file d'attente après la configuration du routage au niveau de la file d'attente
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 CMEK est activé, vous ne pouvez pas effectuer les opérations suivantes :
- Créer des tâches dans une file d'attente avec routage au niveau de la file d'attente
- Appliquer le routage au niveau de la file d'attente
Configurer le routage au niveau de la file d'attente pour les tâches HTTP
Vous pouvez configurer une file d'attente pour remplacer le routage au niveau des tâches lors de la création ou de la mise à jour de la file d'attente. Pour configurer le routage au niveau de la file d'attente, définissez le paramètre uriOverride
de la file d'attente sur l'itinéraire de votre choix.
Si vous appliquez le routage au niveau de la file d'attente pour mettre à jour une file d'attente existante, mettez-la en veille avant d'appliquer les modifications, puis attendez une minute après avoir appliqué les modifications avant de la réactiver.
Mettez en veille la file d'attente en exécutant la commande suivante :
gcloud tasks queues pause QUEUE_ID
Remplacez
QUEUE_ID
par l'ID de votre file d'attente.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 nouvel itinéraire.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ètreupdateMask
défini surhttpTarget
.API RPC : envoyez un
updateQueueRequest
pour la file d'attente avec une charge utile vide et le paramètreupdate_mask
défini surhttp_target
.
L'exemple suivant utilise l'API REST pour mettre à jour l'hôte vers lequel les tâches sont routé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 :
ACCESS_TOKEN
: votre jeton d'accès. Pour l'obtenir, exécutez la commande suivante dans votre terminal :gcloud auth application-default login gcloud auth application-default print-access-token
PROJECT_ID
: ID de votre projet Google Cloud . Pour l'obtenir, exécutez la commande suivante dans votre terminal :gcloud config get-value project
LOCATION
: emplacement de votre file d'attente.NEW_HOST
: nouvel hôte vers lequel vous souhaitez que votre file d'attente soit redirigée.
Patientez une minute.
L'application de la nouvelle configuration peut prendre jusqu'à une minute. L'attente de la reprise de la file d'attente permet d'éviter que les tâches ne soient distribuées avec l'ancienne configuration.
Reprenez la file d'attente en exécutant la commande suivante :
gcloud tasks queues resume QUEUE_ID
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.
Configurez le routage au niveau de la file d'attente et remplacez tout routage au niveau de la tâche :
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE,version:VERSION
Remplacez les éléments suivants :
QUEUE_ID
: ID de la file d'attente (son nom abrégé).SERVICE
: service de nœud 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œuds de calcul pour gérer toutes les tâches d'une file d'attente, vous pouvez diriger le routage vers ce service et la version par défaut :
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE
Vérifiez que la file d'attente a bien été configurée en exécutant la commande suivante :
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Remplacez
LOCATION
par l'emplacement de la file d'attente.La sortie devrait ressembler à ce qui suit :
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
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
Lorsque le routage au niveau de la file d'attente est supprimé, le routage au niveau de la tâche est appliqué aux tâches de la file d'attente et à celles qui y seront ajoutées à l'avenir.
Définir des limites de débit
La limite de fréquence détermine la fréquence maximale à laquelle les tâches peuvent être distribuées par une file d'attente, qu'il s'agisse d'une première tentative ou d'une nouvelle tentative.
Définissez le débit maximal et le nombre de tâches simultanées pouvant être distribuées par une file d'attente en exécutant la commande suivante :
gcloud tasks queues update QUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Remplacez les éléments suivants :
QUEUE_ID
: ID de la file d'attente (son nom abrégé).DISPATCH_RATE
: taux de distribution. Il s'agit de la fréquence d'actualisation des jetons dans le bucket. Dans les conditions où le flux de tâches est relativement stable, il s'agit de la vitesse à laquelle les tâches sont envoyées.MAX_CONCURRENT_DISPATCHES
: 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ètres, vous pouvez mettre à jour le nombre maximal de tâches simultanées en exécutant la commande suivante :
gcloud tasks queues update QUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Vérifiez que la file d'attente a bien été configurée en exécutant la commande suivante :
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Remplacez
LOCATION
par l'emplacement de la file d'attente.La sortie devrait ressembler à ce qui suit :
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
Méthodes pour définir les taux de traitement des files d'attente
Vous pouvez définir les taux de traitement des files d'attente à l'aide de l'API Cloud Tasks ou en important un fichier queue.yaml
. 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 HTTP 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 pourmax_dispatches_per_second
. Pour en savoir plus, consultez MessagesRateLimits
.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 requis 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 à l'aide de 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.
Spécifiez le nombre maximal de nouvelles tentatives liées aux tâches ayant échoué dans la file d'attente, définissez une limite de temps pour les nouvelles tentatives et contrôlez l'intervalle entre les tentatives en exécutant la commande suivante :
gcloud tasks queues update QUEUE_ID \ --max-attempts=MAX_ATTEMPTS \ --max-retry-duration=MAX_RETRY_DURATION \ --min-backoff=MIN_INTERVAL \ --max-backoff=MAX_INTERVAL \ --max-doublings=MAX_DOUBLINGS
Remplacez les éléments suivants :
QUEUE_ID
: ID de la file d'attente (son nom abrégé).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 cet indicateur sur-1
. Notez que siMAX_ATTEMPTS
est défini sur-1
,MAX_RETRY_DURATION
est toujours appliqué.MAX_RETRY_DURATION
: durée maximale de la nouvelle tentative d'une tâche ayant échoué, mesurée à partir de la première tentative. La valeur doit être une chaîne qui se termine par "s", telle que5s
. Si la valeur est définie sur0
, l'âge de la tâche est illimité. Notez que siMAX_RETRY_DURATION
est défini sur0
,MAX_ATTEMPTS
est toujours appliqué.
MIN_INTERVAL
: durée minimale d'attente entre les tentatives. La valeur doit être une chaîne qui se termine par "s", telle que5s
.MAX_INTERVAL
: délai maximal à attendre entre les tentatives. La valeur doit être une chaîne qui se termine par "s", telle que5s
.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. L'intervalle de nouvelle tentative d'une tâche commence àMIN_INTERVAL
, puis doubleMAX_DOUBLINGS
fois, puis augmente de manière linéaire, et enfin effectue de nouvelles tentatives à des intervalles deMAX_INTERVAL
jusqu'àMAX_ATTEMPTS
fois.Par exemple, si
MIN_INTERVAL
est10s
,MAX_INTERVAL
est300s
etMAX_DOUBLINGS
est3
, l'intervalle de relance doublera3
fois, augmentera de manière linéaire de 2^3 * 10 s, puis sera relancé à des intervalles deMAX_INTERVAL
jusqu'à ce que la tâche ait été tentéeMAX_ATTEMPTS
fois : 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s, etc.
Pour en savoir plus sur les paramètres, consultez les paramètres
RetryConfig
de la ressourceQueue
.Vérifiez que la file d'attente a bien été configurée en exécutant la commande suivante :
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Remplacez
LOCATION
par l'emplacement de la file d'attente.La sortie doit contenir les paramètres de nouvelle tentative que vous avez définis.
Étapes suivantes
- Découvrez comment créer des tâches HTTP Target.
- Découvrez comment créer des tâches App Engine.
- Pour en savoir plus sur la gestion des files d'attente, consultez la documentation de référence de l'API RPC.
- Pour en savoir plus sur la gestion des files d'attente, consultez la documentation de référence de l'API REST.