Présentation des files d'attente de tâches

Cette page définit les files d'attente de tâches, et décrit quand et comment les utiliser. Les files d'attente de tâches permettent aux applications d'effectuer des travaux, appelés tâches, de manière asynchrone et hors d'une requête d'utilisateur. Si une application doit exécuter des travaux en arrière-plan, elle ajoute des tâches aux files d'attente de tâches. Les tâches sont exécutées ultérieurement, par des services de nœud de calcul.

Le service de file d'attente de tâches est conçu pour les opérations asynchrones. Il n'offre pas de garanties solides quant à la planification de livraison des tâches et n'est donc pas adapté aux applications interactives dans lesquelles un utilisateur attend le résultat.

Files d'attente d'envoi et files d'attente de retrait

Les files d'attente de tâches peuvent être de deux types : envoi et retrait. Le service de file d'attente de tâches distribue les requêtes de tâches aux services de nœud de calcul de manière différente selon le type de file d'attente.

Les files d'attente d'envoi exécutent des tâches en transmettant des requêtes HTTP aux services de nœud de calcul App Engine. Ils envoient ces requêtes à un rythme fiable et régulier, et garantissent une exécution fiable des tâches. Étant donné que vous pouvez contrôler le rythme d'envoi des tâches à partir de la file d'attente, vous pouvez superviser le comportement des nœuds de calcul en matière de scaling, et donc contrôler également vos coûts.

Les tâches étant exécutées en tant que requêtes destinées aux services App Engine, elles sont soumises à des délais rigoureux. Les tâches gérées par des services de scaling automatique doivent s'achever en dix minutes. Les tâches gérées par des services de scaling de base et manuel peuvent durer jusqu'à 24 heures.

Les files d'attente de retrait ne distribuent aucune tâche. Elles dépendent d'autres services de nœud de calcul qui "louent" des tâches de la file d'attente de leur propre initiative. Les files d'attente de retrait vous apportent davantage de pouvoir et de flexibilité en vous permettant de décider où et quand les tâches sont traitées, mais elles nécessitent également une gestion plus poussée des processus. Quand une tâche est louée, le nœud de calcul à l'origine de la location annonce un délai. Lorsqu'arrive le délai annoncé, le nœud de calcul doit terminer la tâche et la supprimer. Sinon, le service Task Queue autorise un autre nœud de calcul à la louer.

Toutes les tâches de la file d'attente sont exécutées de manière asynchrone. L'application qui crée la tâche la transfère à la file d'attente. L'application d'origine ne reçoit pas de notification indiquant si la tâche a été terminée ou si elle a abouti.

Si un nœud de calcul ne parvient pas à traiter une tâche, le service de file d'attente de tâches procure à la file d'attente un mécanisme de répétition, qui permet d'effectuer de nouvelles tentatives un certain nombre de fois.

Cas d'utilisation

Files d'attente d'envoi

Une opération "lente" constitue un cas typique d'utilisation de la file d'attente d'envoi. Considérons un système de messagerie de réseau social. Chaque fois qu'un utilisateur envoie un message, le réseau doit mettre à jour les abonnés de l'expéditeur. Cela peut prendre beaucoup de temps. À l'aide d'une file d'attente d'envoi, l'application peut mettre une tâche en file d'attente pour chaque message dès son arrivée, pour ensuite la transférer vers un nœud de calcul à des fins de traitement. Lorsque le nœud de calcul reçoit la requête de tâche, il peut récupérer la liste des abonnés de l'expéditeur et mettre à jour la base de données pour les y ajouter. Pour rendre le nœud de calcul encore plus efficace, une autre tâche d'envoi peut être mise en file d'attente pour chaque mise à jour de la base de données.

Les files d'attente d'envoi sont également utilisées pour les tâches planifiées. Imaginez une application qui mette en œuvre une campagne publicitaire. Un groupe de tâches écrites pour envoyer des e-mails peut être ajouté à une file d'attente d'envoi avec des instructions spécifiant de retenir les tâches jusqu'à une heure ultérieure donnée. Lorsque l'échéance arrive, le service Task Queue commence à envoyer des requêtes d'exécution des tâches.

Files d'attente de retrait

Les files d'attente de retrait fonctionnent bien lorsque vous devez regrouper des tâches pour obtenir une meilleure efficacité d'exécution. L'une des solutions consiste à exploiter la possibilité d'associer un tag à une tâche de retrait. Les nœuds de calcul peuvent louer un groupe de tâches portant le même tag. Un exemple typique pourrait être une application qui maintient des classements pour de nombreux jeux différents, avec un grand nombre de joueurs et de groupes qui jouent constamment. Chaque fois qu'un nouveau record est généré, l'application peut mettre en file d'attente une tâche contenant le score et le joueur, et utiliser l'ID de jeu comme tag de tâche. Un nœud de calcul se "réveille" régulièrement, loue un groupe de tâches portant le même ID de jeu et met à jour le classement. Vous pouvez louer des tâches de manière explicite en utilisant une valeur de tag spécifiée ou laisser le service décider quel groupe de tâches portant des tags semblables envoyer.

L'utilisation de tags pour le traitement par lot peut être très puissante. Étant donné que les tags peuvent être générés de manière dynamique pendant l'exécution de l'application, un nœud de calcul peut gérer de nouveaux ID de jeu sans effort particulier.

Étapes suivantes