2012-10-17 3 views
1

J'ai une application Rails avec Resque effectuant des tâches d'arrière-plan sur plusieurs serveurs. Les tâches sont différentes en termes de besoins en ressources, donc je voudrais limiter le nombre de tâches de type particulier, chaque serveur peut faire. Je veux pouvoir demander à plusieurs serveurs d'interroger la même base de données Redis. Voici le scénario: J'ai Server-1 et Server-2 connectés à la même base de données Redis.Resque - répartir uniformément la charge de travail entre plusieurs serveurs

1) Chaque serveur doit prendre 3 tâches "d'encodage" et 5 tâches "d'analyse" au maximum (8 tâches au total). 2) À un moment donné, le serveur Redis aura 10 tâches dans la file d'attente "Encoding" et 12 tâches dans la file d'attente "Parsing" à traiter par les travailleurs Resque. J'ai 2 serveurs en cours d'exécution, la même base de données.

QUESTION: Comment puis-je empêcher le serveur 1 de prendre 8 tâches de "codage" et le serveur 2 de prendre le reste? En d'autres termes, comment limiter Server-1 à ne prendre que 3 tâches de la file d'attente "Encoding" et 5 tâches de la file d'attente "Parsing" et faire Serveur-2 faire la même chose?

Je veux garder le code universel pour que je puisse le déployer sur plusieurs serveurs sans peaufinage individuels ..

Répondre

0

Ce n'est pas quelque chose que vous pouvez ou devez faire au niveau de Redis. Vous avez besoin d'un superviseur qui se trouve entre les demandes d'application à vos instances redis. Je n'ai rien écrit au niveau de la production pour ruby ​​depuis longtemps, donc je ne peux pas suggérer un candidat favori mais je suis sûr qu'il y aura quelque chose dans la communauté ruby ​​pour faire exactement ce dont vous avez besoin.

+0

peut vous indiquer quelques exemples de ce superviseur? – Stpn

0

Vous cant à atteindre cet objectif (je suppose) avec une seule tâche de coupe comme celui-ci

râteau resque: travailleurs count = 8 QUEUE = encoding_queue, parsing_queue CONTEXTE = oui

Mais si vous pouvez bifurquent votre tâche de râteau alors vous pouvez

SUR SERVER-1

rake resque:workers COUNT=3 QUEUE=encoding_queue BACKGROUND=yes

rake resque:workers COUNT=5 QUEUE=parsing_queue BACKGROUND=yes

Répétez la même en position ON SERVER-2

Hope this aide

Questions connexes