我有一个c# 多线程蒙特卡罗模拟,应用程序已经结构化,可以将其划分为独立执行的任务,任务控制器执行任务,聚合中间结果,检查收敛(早期终止标准)然后返回最终结果,目前这是使用 ThreadPool 实现的。
我想利用不止一台计算机来帮助计算。我没有使用 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/
或使用来自 .net 的 JavaSpaces、Jini 或找到等效的 .net 技术
http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/
http://www.jini.org
谢谢