2010-12-28 4 views
2

Il existe un programme de traitement par lots multithread qui crée plusieurs threads de travail pour traiter chaque traitement par lots.Traitement par lots sur plusieurs serveurs

maintenant à l'échelle de l'application de traiter 100 millions de disques, nous avons besoin d'utiliser une batterie de serveurs pour effectuer le traitement de chaque traitement par lots. Existe-t-il un support natif sur C# pour la gestion des requêtes s'exécutant sur une batterie de serveurs? Des idées sur la façon de configurer l'exécutable C# pour travailler avec cette configuration?

Répondre

2

Vous pouvez créer un gestionnaire qui distribue le travail comme fejesjoco dit ou vous pouvez faire vos applications assez intelligent pour saisir seulement un certain nombre d'unités de travail à traiter sur. Quand ils ont terminé le traitement de ces unités, demandez-leur de contacter le serveur DB pour obtenir le lot suivant. Rincer et répéter jusqu'à cuisson complète.

En tant que systèmes note côté des travailleurs les plus distribués gérés par:

  1. travail est mis en attente dans le serveur par lots
  2. processus de travail vérifier avec serveur pour obtenir un lot pour fonctionner sur, le lot disponible est marqué comme étant traité par ce travailleur.
  3. (facultatif) Les processus de travail réintègrent le serveur avec le rapport d'état (c.-à-d. 10% terminé, 20% terminé, etc.)
  4. Le processus de travail termine le travail et soumet les résultats.
  5. Passez à l'étape 2.

Une autre option est d'avoir traiter 3 travailleurs le même jeu de données exactes. Cela vous permettrait de comparer les résultats. Si 2 ou plus ont des résultats identiques, vous acceptez ces résultats. Si tous les 3 ont des résultats différents, alors vous savez qu'il y a un problème et vous devez inspecter les données/code. Habituellement, cela se produit uniquement lorsque les travailleurs sont hors de votre contrôle (comme SETI) ou que vous exécutez des calculs massifs et que vous souhaitez corriger les problèmes matériels potentiels.

Parfois, il y a une application de gestion qui affiche nombre actuel de travailleurs et de progrès avec l'ensemble complet. Si vous savez à peu près combien de temps un lot individuel prend alors vous pouvez détecter quand un travailleur est mort et peut laisser un nouveau processus obtenir le même lot.

Cela vous permet d'ajouter ou de supprimer autant de travailleurs individuels que vous voulez sans avoir à recoder quoi que ce soit. Pourquoi ne pas déployer l'application à l'aide d'une infrastructure distribuée?

1

Je ne pense pas qu'il existe un support intégré pour le clustering. Dans le cas le plus simple, vous pouvez essayer de créer une application de gestion simple qui divise l'entrée entre les serveurs, et vos processus n'auront pas besoin de se connaître les uns les autres, donc pas besoin de réécrire quoi que ce soit.

0

Je recommande CloudIQ Platform Vous pouvez utiliser la plate-forme pour distribuer votre code à n'importe quel nombre de serveurs. Il gère également l'équilibrage de la charge, vous n'aurez donc qu'à soumettre vos travaux à l'infrastructure et gérer la distribution des travaux sur les machines individuelles. Il surveille également l'exécution de l'application, donc si l'une des machines subit une défaillance, les tâches qui y sont exécutées seront redémarrées sur une autre machine du groupe. Consultez le lien Community pour les téléchargements, les forums, etc.