2009-08-04 14 views
7

J'ai un C# multi-threaded Monte Carlo simulation, l'application est déjà structurée de telle sorte qu'il peut être partitionné par des tâches qui s'exécutent indépendamment, un TaskController exécute des tâches , agrège les résultats intermédiaires, vérifie la convergence (critères de terminaison précoce) puis renvoie les résultats finaux, ceci est actuellement implémenté à l'aide d'un ThreadPool..net migration de grille distribuée, recommandations sur les bibliothèques, architecture

Je voudrais aimer tirer parti de plus d'un ordinateur pour aider dans ce calcul. Je n'ai pas l'approbation ou l'infrastructure pour utiliser IIS (cette politique ne va pas changer) mais je peux utiliser par exemple WCF avec la liaison de point de terminaison NetTcpBinding, j'ai testé cette communication à travers le serveur et il a les permissions appropriées et travaux. Pour commencer je pense avoir un maître exe (console app) et plusieurs esclaves sur d'autres serveurs en tant que travailleurs dévoués (devraient-ils être des services exes ou Windows?), Éventuellement je pourrais avoir cet ensemble pour fonctionner des centaines des postes de travail (ainsi que des serveurs) au sein de l'entreprise pendant temps d'inactivité (ou lorsqu'un économiseur d'écran est actif).

Je pourrais écrire moi-même, mais je vais devoir gérer les communications, 1, 2 voies? terminaison anticipée (vérification de résultat de convergence intermédiaire), annulation de tâches non requises, déploiement de travail, découverte de machines disponibles et prêtes pour le déploiement de travail, limitation/pause du travail si un poste de travail n'est plus inactif? tout ce qui va 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 (s'ils sont disponibles) ou les travailleurs esclaves doivent-ils simplement connaître l'adresse maître et demander le travail? en mesure de le faire, ou la communication devrait circuler dans les deux sens? Cela fonctionnera sur une 24 heures avec environ 9 exécutions démarrées par jour pour soutenir différentes régions d'affaires.

Je suis à la recherche de recommandations pour . NET grid/distribué bibliothèques qui peut aider et quelques conseils d'architecture dans cette entreprise.

Mise à jour

a une expérience de toute personne qui utilise l'un des suivants?

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

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

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

Merci de

Répondre

3

J'étudierait la possibilité d'utiliser un space-based architecture 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 à mesure que des emplois deviennent disponibles, ils tirent de l'espace, traitent et réé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 à un cycle particulier afin de regrouper les résultats. L'avantage de ceci est que cela s'adapte très facilement (simplement en ajoutant plus de consommateurs).Les consommateurs devraient 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. Parce que le travail est traité dans le cadre d'une transaction, si un consommateur ne parvient pas à terminer, le travail revient à l'espace et est disponible pour traitement par un autre consommateur.

Vous pouvez gérer facilement les résultats intermédiaires. Le producteur prend les résultats de l'espace et peut dériver des intermédiaires lorsque les résultats deviennent disponibles. Vous pouvez annuler des tâches facilement. Retirez-les simplement de l'espace.

Vous pouvez ajouter plus de 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 ambiguïté. Je ne suis pas sûr de ce que les cadres sont disponibles pour .Net, malheureusement (je suis du monde de Java et utiliserait Javaspaces - ceux-ci utilisent la découverte dynamique, et à côté de aucune configuration est nécessaire). Mais ça vaut la peine de googler. Peut-être (si cela est assez puissant), vous pouvez écrire le producteur/consommateur C# pour l'interface avec une infrastructure Javaspace.

+0

La technologie Jini et Javaspaces est vraiment intéressante. Sont-ils faciles à héberger sur l'infrastructure Windows? sont-ils des services Windows? Un équivalent .net serait très bien. – m3ntat

+0

Vous avez juste besoin d'une VM Java standard, et vous pouvez envelopper un service en utilisant http://wrapper.tanukisoftware.org/doc/english/download.jsp (éditions gratuites ou professionnelles). Je ne connais malheureusement pas .net, malheureusement, mais vous pourriez facilement faire en sorte que votre .net MC impl soit piloté par un processus Java qui parle aux espaces. Vos objets dans le Javaspace pourraient être agnostiques - par ex. XML - pour faciliter une simple transmission au monde .net. –