Проблема классической файловой системы - одновременная удаленная обработка в каталоге - PullRequest
2 голосов
/ 10 июля 2009

У меня есть приложение, которое обрабатывает файлы в каталоге и перемещает их в другой каталог вместе с обработанным выводом. Ничего особенного в этом нет. Введено интересное требование:

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

Дополнительные соображения заключаются в том, что мы не можем использовать файловую систему, поскольку мы поддерживаем как Windows, так и NFS.

Конечно, проблема в том, как сделать так, чтобы разные экземпляры не пытались обрабатывать одну и ту же работу, потенциально повреждая работу или снижая производительность? Блокировка файлов может быть проблематичной, особенно в сетевых ресурсах. Мы можем использовать более сложный метод, такой как простая база данных или инфраструктура обмена сообщениями (например, JMS или аналогичная), но весь кластер должен быть отказоустойчивым. У нас не может быть одной базы данных или поставщика сообщений из-за единственной точки отказа, которую он вводит.

Мы внедрили решение, которое использует многоадресные сообщения для самостоятельного обнаружения экземпляров обработки и выбора супервизора, который назначает работу. Существует тайм-аут на случай, если супервизор уйдет в отставку и будут проведены другие выборы. Наша сетевая библиотека, однако, не очень развита, и наша реализация сообщений неуклюжа.

Мои инстинкты, однако, говорят мне, что есть более простой способ.

Мысли

1 Ответ

1 голос
/ 10 июля 2009

Я думаю, вы можете с уверенностью предположить, что операции переименования являются атомарными во всех сетевых файловых системах, которые вас интересуют. Таким образом, если вы упорядочиваете объем работы в один файл (или привязывает его к одному файлу), тогда каждый сервер должен сначала перечислить каталог, содержащий новую работу, выбрать часть работы и затем переименовать файл в свой имя сервера (скажем, имя компьютера или IP-адрес). Для одного из экземпляров, которые одновременно выполняют одну и ту же операцию, переименование будет выполнено успешно, поэтому они должны затем обработать работу. Для остальных это не удастся, поэтому они должны выбрать другой файл из списка, который они получили.

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

...