Распределение обработки изображений на несколько серверов Windows, блокировка файлов Q - PullRequest
0 голосов
/ 23 апреля 2009

Мне нужно обработать большие файлы изображений в меньшие файлы изображений. Я хотел бы распределить работу по многим «подчиненным» серверам, а не поручать это моему основному серверу. Я использую 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

1 Ответ

0 голосов
/ 23 апреля 2009

Если вы не хотите идти до конца с решением для вычислительного кластерного типа . Вы должны подумать о том, чтобы где-нибудь работал менеджер по работе, который распределяет работу. Таким образом, когда сервер становится доступным для выполнения работы, он запрашивает у менеджера заданий новую часть работы. Затем он может сообщить менеджеру работ, что он закончен, и менеджер работ может сообщить вашему «клиенту», когда работа над всей работой завершена. Таким образом, можно легко зарегистрировать работу и знать, что она завершена, и менеджер по работе может распределить работу, не беспокоясь о состоянии гонки при переименовании файлов. :)

...