2010-12-16 10 views
1

Dans un système réparti, un certain nœud distribue des unités de travail «X» de manière égale sur «N» nœuds (via le passage de message de socket). Au fur et à mesure que nous augmentons le nombre de nœuds travailleurs, chaque nœud termine son travail plus rapidement, mais nous devons configurer plus de connexions. Dans une situation réelle, il serait similaire à changer 10 nœuds dans un système de type Hadoop, chaque nœud traitant 100 Go par 1 000 000 nœuds, chaque nœud traitant 1 Mo.Conception de système distribué

  • Quel est l'impact de la configuration de plus de connexions dans ce cas? Est-ce un gros surcoût dans la fonction poll()?
  • Quelle est la meilleure approche?

Répondre

3

Il semble que vous ayez besoin de consulter Amdahl's Law.

Au moins, c'était comment j'ai calculé combien de machines sur un commutateur à grande vitesse étaient optimales pour mes calculs parallèles. Pouvez-vous mesurer votre coût de réseau?

0

Le temps passé à travailler sur la machine de travail ne devrait représenter qu'une partie du coût du message passer et recevoir.

Également pouvez-vous décrire la notation O pour gérer chaque résultat de travail dans le résultat principal?

Est-ce que votre master round robin attend les réponses? - Si vos nœuds de travail finissent plus vite mais sous-utilisent les ressources du CPU, il se peut qu'un compromis de conception manque?

bien sûr, vous pourriez être la règle ou l'exception à toute loi (recherche argument/out of date). ;-)

1

Est-ce qu'il doit utiliser des sockets et passer des messages entre Supervisor et Worker?

Vous pouvez utiliser un type de mise en file d'attente, évitez donc de charger le superviseur. Ou un système de fichiers distribué similaire à HDFS pour distribuer les tâches et collecter les résultats.

Cela dépend également du nombre de nœuds sur lesquels vous prévoyez de déployer les travailleurs. 1.000.000 nœuds est un très grand nombre donc dans ce cas, vous devrez répartir les tâches dans plusieurs files d'attente. La chose à faire est de savoir ce qui se passera si tous les nœuds finissent leurs tâches en même temps. Il serait utile de mettre une certaine variabilité dans le moment où ils peuvent demander une nouvelle tâche. ZooKeeper (http://hadoop.apache.org/zookeeper/) est potentiellement quelque chose que vous pouvez également utiliser pour synchroniser les tâches.

Questions connexes