2009-08-04 5 views
7

Ich habe ein C# Multithreaded-Monte-Carlo-Simulation ist die Anwendung bereits so strukturiert ist, dass sie durch in Tasks, die unabhängig voneinander ausgeführt werden partitioniert werden kann, wird eine TaskController ausführt Tasks , aggregiert Zwischenergebnisse, prüft auf Konvergenz (frühe Abbruchkriterien) und gibt dann die endgültigen Ergebnisse zurück, dies wird derzeit mit einem ThreadPool implementiert..net verteilte grid computing Migration, Empfehlungen für Bibliotheken, Architektur

Ich würde gerne mehr als einen Computer in dieser Berechnung helfen. Ich habe keine Genehmigung oder Infrastruktur zur Verwendung von IIS (dies ist keine Richtlinie zu ändern), aber ich kann zum Beispiel WCF mit der NetTcpBinding Endpunktbindung verwenden, ich habe diese Kommunikation über den Server getestet und es hat die entsprechenden Berechtigungen und funktioniert.

Um zu beginnen, ich denke, haben eine Master-EXE (Konsole App) und mehrere Sklaven auf anderen Servern als dedizierte Arbeiter (sollten diese exes sein? Oder Windows-Dienste?), Könnte ich schließlich auf Hunderte laufen lassen von Arbeitsplätzen (sowie Servern) innerhalb der Firma während Leerlaufzeit (oder wenn ein Bildschirmschoner aktiv ist).

Ich könnte das selbst schreiben, aber ich muss mit der Kommunikation umgehen, 1, 2-Wege? vorzeitige Beendigung (Zwischenkonvergenz-Ergebnisprüfung), nicht mehr benötigte Aufgaben abbrechen, Einsatz von Arbeit, Entdeckung von verfügbaren und fertigen Maschinen für den Einsatz von Arbeit, Drosseln/Anhalten von Arbeit, wenn eine Arbeitsstation nicht mehr im Leerlauf ist? alles andere, was in einem verteilten System passiert?

Sollte der Master (Task-Controller) die Adressen (IP) aller Slave-Arbeiter kennen und ihnen sagen, dass sie arbeiten sollen (wenn sie verfügbar sind) oder sollten die Slave-Mitarbeiter die Master-Adresse kennen und die Arbeit anfordern in der Lage, dies zu tun, oder die Kommunikation sollte in beide Richtungen fließen? Dies wird auf einer 24-Stunden-Uhr mit etwa 9 Läufe pro Tag gestartet, um verschiedene Geschäftsregionen zu unterstützen.

Ich bin auf der Suche nach Empfehlungen für . NET-Grid/verteilten Bibliotheken, die helfen können und einige Architektur-Beratung in diesem Bestreben.

aktualisieren

jemand Erfahrung hat eine der folgenden verwenden?

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

oder verwendet Javaspaces, Jini von .net oder gleichwertig .net Technologien

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

Dank

Antwort

3

gefunden würde ich die Möglichkeit der Verwendung eines space-based architecture für diese untersuchen.

Der Master würde die Jobs in ein Leerzeichen (im Wesentlichen ein Objekt-Repository) schreiben. Die konsumierenden Clients sind immer auf der Suche nach Jobs und wenn Jobs verfügbar werden, ziehen sie aus dem Space, verarbeiten und schreiben die Ergebnisse in diesen oder einen anderen Bereich zurück (alles unter einer Transaktion). Sie würden Jobs als zu einem bestimmten Lauf gehörend markieren, um Ergebnisse zu gruppieren.

Der Vorteil ist, dass diese sehr einfach skaliert werden kann (einfach durch Hinzufügen von mehr Verbrauchern).Die Verbraucher müssten bestimmen, wann sie arbeiten können, und müssen lediglich mit Informationen über den Raum (wie man sie findet) konfiguriert werden. Der Produzent ist vollständig von der Verbrauchergruppe entkoppelt.

Da Arbeit im Rahmen einer Transaktion verarbeitet wird, kehrt die Arbeit, wenn ein Verbraucher nicht fertiggestellt wird, in den Bereich zurück und steht für die Verarbeitung durch einen anderen Kunden zur Verfügung.

Sie können Zwischenergebnisse leicht verarbeiten. Der Produzent nimmt Ergebnisse aus dem Raum und kann daraus Zwischenergebnisse ableiten, sobald Ergebnisse verfügbar werden. Sie können Aufträge einfach abbrechen. Entferne sie einfach aus dem Raum.

Sie können sehr einfach weitere Hersteller hinzufügen. Sie schreiben einfach in denselben Bereich, und wenn die Jobs entsprechend gekennzeichnet sind, sind die Ergebnisse eindeutig mit dem Produzenten verbunden.

Ich bin nicht sicher, welche Frameworks sind für .Net leider verfügbar (ich bin aus der Java-Welt und würde Javaspaces verwenden - diese verwenden dynamische Erkennung, und neben keine Konfiguration erforderlich ist). Aber etwas Googeln wert. Vielleicht (wenn dies ausreichend mächtig ist) können Sie den C# -Produzenten/-Consumenten als Schnittstelle zu einer Javaspace-Infrastruktur schreiben.

+0

Die Jini und Javaspaces-Technologie sieht wirklich interessant aus. Sind diese einfach in der Windows-Infrastruktur zu hosten? Sind sie Windows-Dienste? Ein Äquivalent von .net wäre sehr nett. – m3ntat

+0

Sie benötigen nur eine standardmäßige Java-VM, und Sie können sie als Service mithilfe von http://wrapper.tanukisoftware.org/doc/english/download.jsp (kostenlose oder professionelle Editionen) umbrechen. Ich weiß leider nichts über .net, aber Sie könnten leicht Ihre .net MC impl von einem Java-Prozess gesteuert werden, der mit den Räumen kommuniziert. Ihre Objekte im Javaspace könnten sprachunabhängig sein - z. XML - um eine einfache Weitergabe an die .net-Welt zu ermöglichen. –

Verwandte Themen