Migration distribuée sur un réseau distribué .net, recommandations sur les bibliothèques, architecture [fermé]

StackOverflow https://stackoverflow.com/questions/1226728

Question

J'ai une simulation de monte carlo multi-threadée c # , l'application est déjà structurée de manière à pouvoir être partitionnée en tâches qui s'exécutent indépendamment, un contrôleur TaskController exécute des tâches, agrège les résultats intermédiaires, vérifie convergence (critère de résiliation anticipée) renvoie ensuite les résultats finaux; elle est actuellement implémentée à l’aide d’un ThreadPool.

J'aimerais utiliser plus d'un ordinateur pour faciliter ce calcul . Je n'ai ni approbation ni infrastructure pour utiliser IIS (cette politique ne changera pas), mais je peux utiliser, par exemple, WCF avec la liaison de point de terminaison NetTcpBinding . J'ai testé cette communication sur le serveur. dispose des autorisations appropriées et fonctionne.

Pour commencer, je pense avoir un maître exe (application de la console) et plusieurs esclaves sur d’autres serveurs en tant que travailleurs dédiés (s’il s’agit de services exes? ou de services Windows?), je pourrais éventuellement faire tourner ce jeu sur Des centaines de postes de travail (ainsi que de serveurs) au sein de l'entreprise pendant le temps d'inactivité (ou lorsqu'un économiseur d'écran est activé).

Je pourrais écrire cela moi-même, mais je devrai gérer les communications 1, 2 voies? arrêt anticipé (vérification du résultat de convergence intermédiaire), annulation des tâches non nécessaires, déploiement du travail, découverte des machines disponibles et prêtes pour le déploiement du travail, limitation / interruption du travail si un poste de travail n'est plus inactif? tout ce qui se passe dans un système distribué?

Le maître (contrôleur de tâches) doit-il connaître les adresses (ip) de tous les travailleurs esclaves et leur dire de faire le travail (si elles sont disponibles) ou les travailleurs esclaves doivent-ils connaître l'adresse du maître et demander du travail lorsqu'ils se trouvent? une position pour le faire ou une communication devrait-elle aller dans les deux sens? Cela fonctionnera sur une horloge 24h / 24 , avec environ 9 essais lancés par jour pour soutenir différentes régions commerciales.

Je recherche des recommandations pour des bibliothèques distribuées .net et .net, ainsi que des conseils d'architecture dans cette entreprise.

Mettre à jour

Quelqu'un at-il déjà utilisé l'un des produits suivants?

http://www.digipede.net/ (commercial)
http://www.gridbus.org/~alchemi/
http://ngrid.sourceforge.net/
http://www.osl.iu.edu/research/mpi.net/

ou des JavaSpaces utilisés, Jini de .net ou des technologies .net équivalentes trouvées

http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/
http://www.jini.org

Merci

Était-ce utile?

La solution

J'étudierais la possibilité d'utiliser une architecture à base d'espace pour cela.

Le maître écrirait les travaux dans un espace (essentiellement un référentiel d’objets). Les clients consommateurs sont toujours à la recherche d'emplois et, au fur et à mesure de la disponibilité des emplois, ils puisent dans l'espace, traitent et écrivent les résultats dans cet espace ou dans un autre (tous dans le cadre d'une transaction). Vous pouvez marquer les travaux comme appartenant à une série particulière afin de regrouper les résultats.

L'avantage de ceci est que cela évolue très facilement (simplement en ajoutant plus de consommateurs). Les consommateurs doivent déterminer quand ils peuvent travailler et doivent simplement être configurés avec des informations sur l'espace (comment le trouver). Le producteur est complètement découplé de l'ensemble des consommateurs.

Étant donné que le travail est traité dans le cadre d'une transaction, si un consommateur échoue, il retourne dans l'espace et est disponible pour le traitement par un autre consommateur.

Vous pouvez gérer facilement les résultats intermédiaires. Le producteur prend des résultats dans l’espace et peut en déduire des intermédiaires à mesure que les résultats deviennent disponibles. Vous pouvez annuler des travaux facilement. Supprimez-les simplement de l'espace.

Vous pouvez ajouter plusieurs producteurs très facilement. Ils écrivent simplement dans le même espace et si les travaux sont étiquetés correctement, les résultats sont liés au producteur sans aucune ambiguïté.

Malheureusement, je ne sais pas quels frameworks sont disponibles pour .Net (je viens du monde Java et utiliserais Javaspaces - ils utilisent la découverte dynamique et aucune configuration n’est nécessaire). Mais cela vaut la peine de googler. Peut-être (si cela est assez puissant), vous pouvez écrire au producteur / consommateur C # pour l’interface avec une infrastructure Javaspace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top