Стратегии распределенного доступа к файлам - PullRequest
1 голос
/ 12 ноября 2010

У меня есть служба Windows, написанная на C #, которая отслеживает папку для файлов для обработки. Когда файлы добавляются в эту папку, служба должна подобрать файл и выполнить с ним задачу, используя файл в процессе.

Я бы хотел распределить работу по нескольким физическим серверам для обеспечения отказоустойчивости. Файлы будут размещены на NAS, доступном для всех экземпляров службы.

Важным требованием является то, чтобы я хотел, чтобы каждая служба брала файл исключительно; файл не должен обрабатываться более чем одной службой.

Есть ли хорошие стратегии для работы с файлами таким способом?

Ответы [ 2 ]

3 голосов
/ 12 ноября 2010

Самым простым решением, как мне кажется, было бы создание файла .lock.Поэтому, если ServiceA видит файл с именем myfile.dat, он будет искать файл myfile.dat.lock.Если он не найдет его, он создаст его;службы подпоследовательности увидят файл myfile.data.lock и пропустят этот файл.

Существует вероятность того, что две службы попытаются создать файл .lock одновременно, но одна из этих служб получитисключение для попытки создания дубликата файла.Таким образом, вы можете обработать это исключение и повторить проверку файла .lock (или просто пропустить его) и продолжить оттуда.

1 голос
/ 13 ноября 2010

Вы можете развернуть Apache ZooKeeper . Когда сервер обработки хочет работать с файлом, он создает и блокирует «узел», работает с файлом, а затем разблокирует узел. Если разовая и неповторимая обработка файла является важным требованием, я бы не стал выполнять ваши собственные. Это сложнее реализовать, чем кажется, и ZooKeeper справится с этим правильно.

...