2009-04-22 28 views
0

我需要将大图像文件处理为较小的图像文件。我想将这些工作分发给许多“奴隶”服务器,而不是用这个任务来分配我的主服务器。我正在使用Windows Server 2005/2008,C#和ASP.NET。我有很多Web应用程序开发经验,但尚未开发分布式系统。我有一个概念,即这可以设计如下:将图像处理分布到多个Windows服务器,文件锁定Q

1)文件将被放置在共享网络驱动器

2)从属服务器将定期轮询新内容

3)从设备的驱动器服务器会将新发现的文件重命名为UNPROCESSED_appIDXXXX_jidXXXXX_photoidXXXXX.tif,并开始处理该文件。

4)其他从属服务器将避免试图通过检查文件名来处理正在处理的文件,即如果某些事物被命名为“UNPROCESSED”,他们将不会尝试处理。

我想知道的几件事情:

1)会不会有问题,有两个从属服务器试图“抢”,并立即重命名文件,或将在Windows Server自动锁定文件?

2)您认为通知处理新内容的最佳机制应该是什么?一个简单的想法是在每个从系统上编写一个基本的aspx页面,并使其在定时器上运行。一个更好的主意可能是编写一个利用SystemFileWatcher的Windows服务,并让它在每个从属系统上运行。第三个想法是让中央服务器以某种方式向给定的从属服务器发送指令来尝试处理工作,但我不知道如何通过非常简单的方法调用这种通信方式,即让主服务器通过消息通过HTTP。

我非常感谢你所提供的任何指导。

干杯, -KF

回答

0

如果你不想去,一路用compute cluster type solution。你应该考虑让一个工作经理跑到某个地方来完成工作。这样,当一台服务器可以工作时,它会要求工作管理员做一些新的工作。然后,它可以告诉工作经理完成工作,工作经理可以在整个工作完成时通知你的“客户”。这样一来,注册工作就很容易,并且知道它已经完成,并且作业管理者可以将工作分包出去,而无需担心文件重命名的竞争状况。 :)

+0

好主意,谢谢。你有什么建议的沟通机制来说明“客户”应该如何与“工作经理”沟通? 确保解决方案相当分离的一种方法是将所有信息保存到单个数据库中:作业分配可根据需要结束,成功通知可在DB中注明。你甚至可以想象有多个“工作经理”参考数据并根据需要分配工作...... – kendor 2009-04-22 23:35:08