2009-08-04 23 views
7

我有一個c#多線程蒙特卡洛模擬,應用程序已經構建,它可以被分割成獨立執行的任務,TaskController執行任務,彙總中間結果,檢查收斂(提前終止標準),然後返回最終結果,這當前使用ThreadPool實現。.net分佈式網格計算遷移,對庫的建議,體系結構

我想喜歡利用多臺計算機來幫助計算。我沒有批准或基礎設施來使用IIS(這是政策不會改變),但我可以使用例如WCF與NetTcpBinding端點綁定,我測試了這種通信服務器,它有適當的權限和作品。

要開始我想有一個主exe(控制檯應用程序)和其他服務器上的幾個奴隸作爲專職工人(應該是exes或windows服務?),最終我可以讓這個集合運行在數百(以及服務器)在公司內空閒時間(或當屏幕保護程序處於活動狀態時)。

我可以自己寫這個,但我必須處理通信,1,2路?提前終止(中間收斂結果檢查),取消不再需要的任務,部署工作,發現可用和準備好部署工作的機器,如果工作站不再閒置時節流/暫停工作?分佈式系統中的其他一切?

如果主人(任務控制器)知道所有從屬工人的地址(ip),並告訴他們工作(如果他們可用),或者如果從屬工人知道主地址並請求工作有能力這樣做,還是溝通應該流向雙方?這將運行在24小時制,每天啓動大約9次運行以支持不同的商業區域。

我在尋找關於.net網格/分佈式庫的建議,可以幫助您和這項工作中的某些架構建議。

更新

具有使用以下任何人的經驗?

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

或使用的JavaSpaces,Jini的從.NET或中找到對應的.NET技術

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

感謝

回答

3

我會調查使用這個space-based architecture的可能性。

大師會將作業寫入空間(本質上是對象存儲庫)。消費客戶總是在尋找工作,而隨着工作的到來,他們將從空間中拉出,處理並將結果寫回該空間或另一個(全部在交易之下)。您可以將作業標記爲屬於特定運行,以便對結果進行分組。

這樣做的好處是,這非常容易擴展(簡單地通過增加更多消費者)。消費者必須確定他們何時能夠工作,並且只需要配置有關空間的信息(如何找到它)。生產者與消費者完全脫鉤。

由於工作是在事務下處理的,如果消費者未能完成,工作將返回到該空間並且可供另一個消費者處理。

您可以輕鬆處理中間結果。生產者從空間中獲取結果,並在結果可用時派生中間體。您可以輕鬆取消工作。只需將它們從空間中移除即可。

您可以非常輕鬆地添加更多生產商。他們只是寫入相同的空間,並且如果作業被正確標記,結果將與製作者毫不含糊地聯繫起來。不幸的是(我來自Java世界並且會使用Javaspaces--這些使用動態發現,而且旁邊沒有需要配置)。我不確定什麼框架可用於.Net,不幸的是(我來自Java世界並且將使用Javaspaces - 這些使用動態發現,並且接下來不需要配置)。但值得一些谷歌搜索。也許(如果這足夠強大的話),你可以編寫C#生產者/消費者接口到一個Java空間基礎架構。

+0

Jini和Javaspaces技術看起來非常有趣。這些容易在Windows基礎架構上託管嗎?他們是Windows服務嗎?一個.net等價物將會非常好。 – m3ntat 2009-08-04 11:19:58