我需要将大图像文件处理成较小的图像文件。我想将工作分发给许多“奴隶”服务器,而不是用这个来分配我的主服务器。我使用的是Windows Server 2005/2008,C#和ASP.NET。我有很多Web应用程序开发经验,但还没有开发分布式系统。我有一个概念,可以设计如下:
1)文件将被放置在共享网络驱动器中
2)从属服务器会定期轮询驱动器以获取新内容
3)从属服务器会将新找到的文件重命名为UNPROCESSED_appIDXXXX_jidXXXXX_photoidXXXXX.tif并开始处理该文件。
4)其他从属服务器将避免尝试通过检查文件名来处理正在处理的文件,即如果某些内容已被命名为“未处理”,则他们将不会尝试处理。
我想知道一些事情:
1)两个从属服务器是否会出现问题,试图“抓取”并一次重命名该文件,或者Windows Server会自动锁定该文件吗?
2)您认为通知新内容进行处理的最佳机制是什么?一个简单的想法是在每个从系统上编写一个基本的aspx页面,并让它在一个计时器上运行。更好的想法可能是编写一个使用SystemFileWatcher并让它在每个从属系统上运行的Windows服务。第三个想法是让一个中央服务器以某种方式将指令分派给给定的从属服务器以尝试处理作业,但我不知道如何调用这种通信,除了让主服务器通过一个非常黑客的方法通过HTTP发送消息。
我非常感谢您提供的任何指导。
干杯, -KF
答案 0 :(得分:0)
如果您不想一直使用compute cluster type solution。你应该考虑让一个工作经理在某个地方开展工作。这样,当服务器可以工作时,它会要求作业管理员做一些新的工作。然后,它可以告诉作业经理它已完成,并且作业管理员可以在完成整个工作的工作时通知您的“客户”。这样,就可以很容易地注册工作并知道它是完整的,并且工作经理可以在不担心文件重命名的竞争条件的情况下完成工作。 :)