Créer des files d'attente d'envoi

Cette page explique comment créer et personnaliser une file d'attente d'envoi et comment examiner le contenu d'une file d'attente.

Utiliser un fichier de configuration de file d'attente pour créer des files d'attente

Pour traiter une tâche, vous devez l'ajouter à une file d'attente. App Engine fournit une file d'attente d'envoi par défaut, nommée default, configurée et prête à être utilisée avec les paramètres par défaut. Si vous le souhaitez, vous pouvez simplement ajouter toutes vos tâches à la file d'attente par défaut, sans avoir à créer et configurer d'autres files d'attente.

Pour ajouter des files d'attente ou changer la configuration par défaut, modifiez le fichier de configuration de file d'attente de votre application, que vous transférerez ensuite vers App Engine. Vous pouvez créer jusqu'à 10 files d'attente pour les applications gratuites, et jusqu'à 100 files d'attente pour les applications utilisant la facturation. Les files d'attente ne peuvent pas être créées dynamiquement.

Ce fichier de configuration de la file d'attente définit deux files d'attente :

appcfg/xml

<?xml version="1.0" encoding="UTF-8"?>
  <queue-entries>
    <queue>
      <name>queue-blue</name>
      <target>v2.task-module</target>
    </queue>
    <queue>
      <name>queue-red</name>
      <rate>1/s</rate>
    </queue>
  </queue-entries>
  ```

gcloud/yaml

 queue:
 - name: queue-blue
   target: v2.task-module
   rate: 5/s

 - name: queue-red
   rate: 1/s

Pour importer le fichier :

appcfg/xml

Mac/Linux :

    [PATH_TO_APP_ENGINE_SDK]\bin\appcfg.sh update [YOUR_APP_DIR]

Windows :

    [PATH_TO_APP_ENGINE_SDK]\bin\appcfg.cmd update [YOUR_APP_DIR]

gcloud/yaml

gcloud app deploy queue.yaml

Toutes les tâches ajoutées à queue-blue sont envoyées au module cible v2.task-module. Le taux d'actualisation de queue-red passe de 5/s à 1/s. Les tâches seront retirées de la file d'attente et envoyées à leur cible à raison d'une tâche par seconde.

Si vous supprimez une file d'attente, vous devez attendre environ sept jours avant de créer une file d'attente portant le même nom.

De nombreux autres paramètres peuvent être ajoutés au fichier de configuration pour personnaliser le comportement d'une file d'attente d'envoi. Pour en savoir plus, reportez-vous à la documentation de référence sur le fichier de configuration de file d'attente.

Définir le taux de traitement de la file d'attente d'envoi

Vous pouvez contrôler le taux de traitement des tâches dans chaque file d'attente en définissant d'autres directives, par exemple : rate, bucket_size et max_concurrent_requests.

La file d'attente de tâches utilise des token buckets (seaux à jetons) pour contrôler le taux d'exécution des tâches. Chaque file d'attente nommée comprend un bucket qui contient des jetons dont le nombre maximal est spécifié par la valeur bucket_size, ou au maximum 5 jetons si vous ne spécifiez pas la taille du bucket.

Chaque fois que l'application exécute une tâche, un jeton est supprimé du bucket. L'application continue de traiter des tâches de la file d'attente jusqu'à ce que le bucket n'ait plus de jetons. App Engine ajoute des jetons dans le bucket en fonction du rate que vous avez spécifié pour la file d'attente.

Si la file d'attente contient des tâches à traiter et que son bucket contient des jetons, App Engine traite simultanément autant de tâches qu'il y a de jetons. Cela peut entraîner des rafales de traitement, ce qui consomme des ressources système et concurrence les requêtes servant les utilisateurs.

Si vous souhaitez empêcher l'exécution simultanée d'un trop grand nombre de tâches ou éviter les conflits dans le datastore, utilisez max_concurrent_requests.

L'exemple suivant montre comment définir max_concurrent_requests pour limiter les tâches, et comment ajuster la taille et le débit du bucket en fonction des besoins de votre application et des ressources disponibles :

appcfg/xml

<?xml version="1.0" encoding="UTF-8"?>
<queue-entries>
  <queue>
    <name>queue-blue</name>
    <rate>20/s</rate>
    <bucket-size>40</bucket-size>
    <max-concurrent-requests>10</max-concurrent-requests>
  </queue>
</queue-entries>

gcloud/yaml

queue:
- name: queue-blue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Définir des limites de stockage pour toutes les files d'attente

Vous pouvez vous servir du fichier de configuration de file d'attente pour définir la quantité totale d'espace de stockage que les données de tâche peuvent utiliser sur l'ensemble des files d'attente. Pour définir la limite de stockage totale, incluez l'élément de premier niveau total_storage_limit :

appcfg/xml

<?xml version="1.0" encoding="UTF-8"?>
<queue-entries>
  <total-storage-limit>120M</total-storage-limit>
  <queue>
    <name>queue-blue</name>
    <rate>35/s</rate>
  </queue>
</queue-entries>

gcloud/yaml

# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
  rate: 35/s

La valeur est un nombre suivi d'une unité : B pour les octets, K pour les kilo-octets, M pour les mégaoctets, G pour les gigaoctets et T pour les téraoctets. Par exemple, la valeur 100K spécifie une limite de 100 kilo-octets. Si l'ajout d'une tâche risque de provoquer le dépassement de la limite autorisée pour le stockage, la demande d'ajout de la tâche à la file d'attente échoue. La limite par défaut est de 500M (500 mégaoctets) pour les applications gratuites. Pour les applications facturées, il n'y a pas de limite tant que vous n'en définissez pas une explicitement. Vous pouvez utiliser cette limite pour protéger votre application contre une erreur de programmation fork bomb dans laquelle chaque tâche ajoute plusieurs autres tâches au cours de son exécution.

Si votre application reçoit des erreurs pour un quota insuffisant lors de l'ajout de tâches, il peut être utile d'augmenter la limite de stockage total. Si vous utilisez cette fonctionnalité, il est vivement recommandé de définir une limite correspondant au stockage requis sur plusieurs jours de tâches. Cela permet aux files d'attente d'être temporairement sauvegardées et de continuer d'accepter de nouvelles tâches tout en résolvant celles en attente et en étant protégées contre les erreurs de programmation.

Configurer le nombre maximal de requêtes simultanées

Vous pouvez contrôler le taux de traitement en définissant max_concurrent_requests, ce qui limite le nombre de tâches pouvant s'exécuter simultanément.

Si la vitesse de traitement de la file d'attente de l'application est de 20/s et que le bucket contient 40 jetons, les tâches de la file sont exécutées à une vitesse de 20/s avec de brefs pics à 40/s. Ces paramètres sont appropriés si la latence des tâches est relativement basse. Toutefois, si elle augmente de manière significative, le nombre de tâches exécutées simultanément sera bien plus important. Cette charge supplémentaire peut utiliser des instances supplémentaires et ralentir l'application.

Supposons par exemple que la latence normale des tâches est de 0,3 seconde. À cette latence, vous traitez environ 40 tâches simultanément. Cependant, si cette latence passe à 5 secondes, plus de 100 tâches peuvent être facilement exécutées simultanément. Cette augmentation contraint l'application d'utiliser plus d'instances pour traiter le supplément de tâches, ce qui peut ralentir toute l'application et interférer avec les requêtes des utilisateurs. Vous pouvez éviter cette éventualité en définissant max_concurrent_requests sur une valeur inférieure.

Par exemple, si vous définissez max_concurrent_requests sur 10, notre exemple de file d'attente conserve environ 20 tâches par seconde lorsque la latence est de 0,3 seconde. Lorsque la latence dépasse 0,5 seconde, ce paramètre régule la fréquence de traitement de sorte qu'un maximum de 10 tâches soient exécutées simultanément.

appcfg/xml

<?xml version="1.0" encoding="utf-8"?>
<queue-entries>
  <queue>
    <name>optimize-queue</name>
    <rate>20/s</rate>
    <bucket-size>40</bucket-size>
    <max-concurrent-requests>10</max-concurrent-requests>
  </queue>
</queue-entries>

gcloud/yaml

 queue:
 - name: optimize-queue
   rate: 20/s
   bucket_size: 40
   max_concurrent_requests: 10

Surveiller des files d'attente dans la console GCP

La page "Files d'attente de tâches" de la console GCP comporte des informations sur toutes les files d'attente de tâches de votre application.

  1. Accédez à la page "File d'attente de tâches" dans la console GCP et sélectionnez l'onglet "Files d'attente d'envoi" dans la barre de menu en haut de la page.

    Accéder à l'onglet Files d'attente d'envoi

  2. L'onglet Files d'attente d'envoi répertorie toutes les files d'attente de l'application. Cliquez sur un nom de file pour afficher la page Détails de la file de tâches, où vous pouvez voir toutes les tâches de la file sélectionnée.

Étape suivante

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Java