Мне нужно обработать большие файлы изображений в меньшие файлы изображений. Я хотел бы распределить работу по многим «подчиненным» серверам, а не поручать это моему основному серверу. Я использую Windows Server 2005/2008, C # и ASP.NET. У меня большой опыт разработки веб-приложений, но я не разработал распределенные системы. У меня было представление, что это можно сделать следующим образом:
1) Файлы будут размещены на общем сетевом диске
2) Ведомые серверы периодически опрашивают диск на наличие нового контента
3) Подчиненные серверы переименовывают вновь найденные файлы во что-то вроде UNPROCESSED_appIDXXXX_jidXXXXX_photoidXXXXX.tif и начинают обработку этого файла.
4) Другие подчиненные серверы не будут пытаться обрабатывать обрабатываемые файлы, проверяя имя файла, т. Е. Если что-то было названо «UNPROCESSED», они не будут пытаться обработать.
Мне интересно несколько вещей:
1) Будут ли проблемы с двумя подчиненными серверами, пытающимися «захватить» и переименовать файл одновременно, или Windows Server автоматически заблокирует файл?
2) Каким, по вашему мнению, должен быть лучший механизм уведомления о новом контенте для обработки? Одна простая идея - написать базовую страницу aspx на каждой подчиненной системе и запустить ее по таймеру. Лучшей идеей может быть написание службы Windows, использующей SystemFileWatcher, и запуск ее на каждой подчиненной системе. Третья идея состоит в том, чтобы центральный сервер каким-то образом отправлял инструкции на заданный подчиненный сервер, чтобы попытаться выполнить задание обработки, но я не знаю способов вызова такого рода связи, кроме очень хакерского подхода, когда главный сервер передает сообщение через HTTP.
Я был бы очень признателен за любые ваши рекомендации.
Ура,
-KF