Note sur l’équilibrage de charge de calcul sur plusieurs machines

Préparation du broker

Les commandes fournie par la suite amqp-tool sont utiles mais la version packagée dans homebrew (gestionnaire de paquet pour Mac OS X) n’ont pas la capacité de déclarer la configuration du serveur. Il faut donc réaliser la configuration sur le serveur avant de continuer.

Il faut pour cela déclarer un point d’échange. Dans le cas d’exemple, ce sera dns_ex.

Afin de pouvoir conserver les tâches même si aucun exécuteur n’est lancé nous ajoutons manuellement une file de message. Ajoutons la queue q_dns_ttl avec une expiration automatique des messages à 1 jour (= 24 * 60 * 60 * 1000 = 86400000 ms).

Afin de recevoir des tâches dans la file d’attente, il faut associer la file avec le point d’échange.

On accepte tous les messages entrant dans le point d’échange (routing key = “#”).

Publication des tâches

Préparation des données à fournir à notre tâche

Pour l’exemple, utilisons la liste des sites les plus populaires fournie par Alexa.

script issu de gist.github.com

wget -q http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
unzip top-1m.csv.zip
awk -F ',' '{print $2}' top-1m.csv|head -1000 > top-1000.txt
rm top-1m.csv*

Le script bash qui constitue la tâche

Contenu du fichier dig.sh :

read line
echo "Message: $line"
dig $line

On le rend exécutable :

chmod +x dig.sh

Exécution des tâches

Envois des tâches

Explication rapide des options :

  • “-e” : exchange name : le nom du point d’échange
  • ”–url” : l’URL de connexion au serveur.
  • “-l” : pour prendre chaque line en entrée comme un message séparé
cat top-1000.txt  | amqp-publish -e "dns_ex" --url=amqp://guest:guest@localhost:5672 -l

Réception et exécution

Explication rapide des options :

  • “-q” : queue name : le nom de la file d’attente
  • “-p” : prefech : le nombre de message à prendre dans la file. Permet d’aumenter les performances si la tâche est rapide par rapport au temps de transfert du message.
amqp-consume -q "q_dns_ttl" --url=amqp://guest:guest@localhost:5672 -p 1 ~/dig.sh

Liens

Licence

logo creative common by-sa 3.0 Creative Commons Paternité – Partage à l’Identique 3.0 non transcrit