我有一个的 C#多线程蒙特卡罗模拟下,应用程序已经构造为使得其可通过成独立地执行的任务被划分,一个TaskController执行任务,汇总为中间结果,支票收敛(提前终止条件),然后返回最终结果,这是使用一个线程池目前实现。

我的想利用多台计算机在该计算以帮助。我没有批准或基础设施使用IIS(这个政策不会改变),但我可以使用例如 WCF与NetTcpBinding的端点绑定,我测试过在服务器和它这个通信具有适当的权限和工作原理。

要开始我想有一个主EXE(控制台应用程序),并在其他服务器上的几个奴隶专用工人(应该是这些EXE文件?或Windows服务?),最终我能有这个设置来运行的数百在公司内的工作站(以及服务器)的过程中的闲置时间(或当屏幕保护已被激活)

我会这样写我自己,但我必须处理通信,1,2路?提前终止(中间收敛结果检查),工作部署取消不再需要的任务,工作部署,提供和准备机器的发现,节流/工作暂停,如果工作站不再闲置?其他一切变为分布式系统?

当主(任务控制器)知道所有的奴隶工的地址(IP),并告诉他们做的工作(如果可用),还是应该从工人只知道主地址及要求的工作时,他们在有能力这样做,或通信应沿着两个方向流动?这将有大约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

由于

有帮助吗?

解决方案

我将调查使用此基于空间的结构的可能性。

在主会写的作业到空间(实质上是一个对象库)。消费的客户一直在寻找工作和就业作为可用,他们会拉从空间,过程和写回结果到空间,或其他(所有交易下)。你会标记乔布斯属于一个特定的运行,以团体成绩。

这样做的优点是,这扩展非常容易地(简单地通过添加更多的消费者)。消费者将不得不决定时,他们可以工作,只需要提供关于空间(如何找到它)的信息进行配置。制片人从一组消费者的完全解耦。

由于工作是一个事务处理下,如果消费者未能完成,工作返回到空间和可用于处理由另一个消费者。

可以很容易地处理中间结果。生产者承担了从空间结果,并可以得到中间体作为结果变得可用。您可以轻松地取消作业。简单地从该空间移除。

您可以很轻松地添加更多的厂家。他们只是写入相同的空间,并且如果作业被适当地标记的,结果被绑定到生产者明确。

我不知道什么框架可用于净,可惜(我从Java世界我和会使用的 JavaSpaces的 - 这些使用动态发现和旁边没有配置需要)。但值得一些谷歌搜索。也许,(如果这是足够强大),你可以写C#生产者/消费者交互的Javaspace基础设施。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top