2009-08-04 11 views
7

Mam wielowątkową symulację C# C#, aplikacja jest już zorganizowana w taki sposób, że może być podzielona na grupy zadań, które wykonują niezależnie, TaskController wykonuje Zadania , agreguje wyniki pośrednie, sprawdza zbieżność (kryteria wczesnego zakończenia), a następnie zwraca wyniki końcowe, co jest obecnie realizowane za pomocą ThreadPool..net rozproszona migracja obliczeń gridowych, zalecenia dla bibliotek, architektura

Chciałbym, aby wykorzystywał więcej niż jeden komputer do pomocy w obliczeniach. Nie mam aprobaty ani infrastruktury do korzystania z IIS (ta zasada się nie zmieni), ale mogę użyć na przykład WCF z wiązaniem punktu końcowego NetTcpBinding, przetestowałem tę komunikację na serwerze i ma ona odpowiednie uprawnienia i Prace.

Aby rozpocząć myślę jeden exe głównego (APP konsola) i kilka niewolników na innych serwerach dedykowanych pracowników (jak powinny one być? Eks lub usługi Windows?), W końcu mogę mieć ten zestaw do uruchomienia na setek stacji roboczych (a także serwerów) wewnątrz firmy podczas bezczynności (lub gdy aktywny jest wygaszacz ekranu).

Mogę napisać to sam, ale muszę poradzić sobie z komunikacją, 1, 2-drożny? przedterminowe zakończenie (pośrednie sprawdzanie wyniku konwergencji), anulowanie zadań, które nie są już potrzebne, wdrożenie pracy, odkrycie dostępnych i gotowych Maszyn do wdrażania pracy, dławienie/wstrzymywanie pracy, jeśli stacja robocza nie jest już bezczynna? wszystko inne, co dzieje się w systemie rozproszonym?

Czy kapitan (kontroler zadań) powinien znać adresy (ip) wszystkich pracowników-niewolników i nakazać im pracę (jeśli są dostępni) lub czy pracownicy-podawcy po prostu znają adres główny i żądanie pracy, gdy są w stanie to zrobić, czy komunikacja powinna płynąć w obie strony? To będzie działać na zegar 24-godzinny z około 9 uruchomień rozpoczęte dziennie w celu wspierania różnych regionów biznesowych.

Poszukuję rekomendacji dla . Sieci grid/biblioteki rozproszone, które mogą pomóc i pewne porady dotyczące architektury w tym przedsięwzięciu.

Aktualizacja

ma ktoś doświadczenia z wykorzystaniem dowolnego z poniższych?

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

lub używane JavaSpaces, Jini z .net .net lub znajdując równoważnych technologii

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

Thanks

Odpowiedz

3

chciałbym zbadać możliwość korzystania z space-based architecture do tego.

Urządzenie master zapisałoby zadania w spacji (zasadniczo repozytorium obiektów). Konsumujący klienci zawsze szukają pracy, a gdy prace stają się dostępne, będą pobierać z przestrzeni kosmicznej, przetwarzać i zapisywać wyniki do tej przestrzeni lub do innej (wszystko w ramach transakcji). Oznaczałoby to zadania jako należące do określonego przebiegu w celu grupowania wyników.

Zaletą tego jest to, że skaluje się to bardzo łatwo (po prostu przez dodanie większej liczby konsumentów).Konsumenci będą musieli określić, kiedy mogą pracować, i po prostu muszą być skonfigurowane z informacjami o przestrzeni (jak ją znaleźć). Producent jest całkowicie oddzielony od zestawu konsumentów.

Ponieważ praca jest przetwarzana w ramach transakcji, jeśli konsument nie ukończy, praca powraca do miejsca i jest dostępna do przetworzenia przez innego konsumenta.

Możesz łatwo obsługiwać wyniki pośrednie. Producent wykorzystuje wyniki z przestrzeni i może czerpać półprodukty, gdy wyniki stają się dostępne. Możesz łatwo anulować zadania. Po prostu usuń je z kosmosu.

Możesz bardzo łatwo dodać kolejnych producentów. Po prostu piszą do tej samej przestrzeni, a jeśli zadania są odpowiednio oznaczone, wyniki są jednoznacznie powiązane z producentem.

Nie jestem pewien, jakie ramy są dostępne dla .Net, niestety (pochodzę ze świata Java i używam Javaspaces - te wykorzystują wykrywanie dynamiczne, a obok nie jest wymagana żadna konfiguracja). Ale warte trochę Googling. Być może (o ile jest wystarczająco wydajny), można napisać producenta/konsumentów C# do interfejsu do infrastruktury Javaspace.

+0

Technologia Jini i Javaspaces wygląda naprawdę interesująco. Czy są łatwe do obsługi w infrastrukturze Windows? czy są to usługi Windows? Równoważnik .net byłby bardzo miły. – m3ntat

+0

Potrzebna jest tylko standardowa maszyna wirtualna Java i można ją zawijać jako usługę przy użyciu http://wrapper.tanukisoftware.org/doc/english/download.jsp (wersji bezpłatnej lub profesjonalnej). Nie wiem na temat .net, niestety, ale możesz łatwo dostać się do .net MC impl, by być napędzanym z procesu Java rozmawiającego ze spacjami. Twoje obiekty w Javaspace mogą być agnostyczne dla języka - np. XML - aby ułatwić proste przejście do świata .net. –