3

Mon application Google App Engine ajoute un grand nombre de deferred tasks à task queue. Les tâches sont planifiées pour s'exécuter toutes les x secondes. Si je comprends correctement la propriété de taille de compartiment b, une valeur élevée empêcherait les tâches différées de s'exécuter jusqu'à ce que des tâches b aient été ajoutées. Cependant, il existe une exigence en temps quasi réel que les tâches s'exécutent comme prévu. Je ne veux pas que les tâches soient bloquées jusqu'à ce que la taille de seau soit atteinte. Au lieu de cela, ils devraient être aussi proches que possible de l'heure prévue.Quelle est la meilleure taille de compartiment pour une file d'attente de tâches remplie de nombreuses tâches différées dans Google App Engine?

Pour soutenir ce cas d'utilisation, dois-je utiliser un seau taille de 1 et un taux de 500 (which is the current maximum rate)? Quelles autres approches existent pour soutenir cela? Merci!

Répondre

5

La taille du compartiment n'empêche pas les tâches de s'exécuter individuellement. Il joue un rôle différent. Supposons que vous ayez une file d'attente vide avec un débit de 500 tâches par seconde et plusieurs heures où aucune tâche n'est ajoutée ou démarrée. Puis soudainement un grand nombre de tâches sont ajoutées à la fois. Combien de ces tâches souhaitez-vous démarrer immédiatement? Définissez ce nombre en tant que taille de votre compartiment. Par exemple, avec une taille de compartiment de 1000, 1000 tâches seront démarrées immédiatement (puis 500 par seconde).

Comment ça marche? Le seau est complété par 500 jetons toutes les secondes (le taux de la file d'attente), jusqu'au maximum étant la taille du seau. Lorsque des tâches sont disponibles pour démarrer, elles ne seront démarrées que lorsque le compartiment n'est pas vide et un jeton sera supprimé du compartiment au démarrage de chaque tâche.

+0

@Ingo veuillez relire cette réponse. – aschmid00

0

Vous ne devez PAS utiliser les files d'attente de tâches (TQ) pour les tâches différées qui sont importantes à exécuter en temps quasi réel en supposant que le paramètre de compartiment/débit garantit un débit élevé. Il y a eu plusieurs discussions dans les groupes Google sur les retards rares avec des heures de début de tâche qui sont des minutes ou plus. La taille et les débits du godet n'auront aucune incidence sur ce point: vos tâches TQ resteront là pendant que votre TQ à haut débit est inactif. À ce jour, je n'ai jamais vu aucune explication de la part de Google pour expliquer pourquoi cela se produit. Encore une fois, si vous utilisez des QT pour des tâches proches du temps réel, vous DEVEZ prendre en compte les rares fois où vos tâches seront retardées de quelques minutes avant de commencer. (Je le fais en fait, et je n'ai pas encore été affecté négativement, mais vous devez avoir du code en place pour gérer un résultat = tâche retardée). Mon grand espoir est qu'avec les nouveaux tests de serveur/application en cours, Google trouvera un moyen facile de tuer ce problème énorme avec les QT (croisés les doigts).

+0

Pouvez-vous élaborer comment «... auriez-vous du code en place pour gérer un résultat = tâche retardée»? –

Questions connexes