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