У нас есть процесс java, который прослушивает каталог X в файловой системе, используя apache commons vfs. Всякий раз, когда новый файл экспортируется в этот каталог, происходит наш процесс. Сначала мы переименем файл в filename.processing и проанализируем имя файла, получаем некоторую информацию из файла и вставляем в таблицы перед отправкой этого файла в систему управления документами , Это однопоточное приложение для каждого кластера. Теперь рассмотрим этот запуск в среде кластера, у нас есть 5 серверов. Таким образом, 5 разных виртуальных машин пытаются получить доступ к одному файлу. Вся реализация была основана на том, что только один процесс может переименовать файл в .processing в данный момент времени, так как ОС не позволит нескольким процессам изменять файл одновременно. После того, как кластер get удерживает и переименовывает файл в .processing, другие кластеры будут игнорировать файлы, имеющие формат .processing.Java-кластер, запускать задачу только один раз
Это работало отлично с более чем года, но сейчас мы обнаружили несколько дубликатов. Похоже, что несколько кластеров захватили файл, в этом случае говорят, что кластер a, b, c получил доступ к файлу f.pdf, и они переименовали его в f.pdf.processing в одно и то же время (я все еще сбитый с толку как ОС позволяет одновременно изменять файл). В результате этого кластер a, b, c они обработали файл и отправили его в систему управления документами. Итак, теперь есть 3 дубликата файлов.
Итак, вкратце, что я ищу, подходит для запуска задачи только один раз в среде кластера. Я также хочу, чтобы у него был механизм переключения, поэтому, если что-то пошло не так с кластером, другой кластер возьмет задачу. Мы не хотим устанавливать переменную env, как master = true в поле, поскольку это ограничит ее только одним кластером и не будет обрабатывать переход на другой ресурс.
Любые виды помощи приветствуются.
Есть ли версия tl; dr? –
Выполняет ли ваше приложение много мелких файлов или несколько больших? Я имею в виду, можно ли дождаться некоторого количества времени до начала обработки или вызвать проблемы с производительностью? – user3707125
Это кажется очень склонным к ошибкам, даже если сделано правильно. Вы должны посмотреть на Амазонки SQS, чтобы увидеть, как они управляют задачами, и либо использовать это, либо реализовывать что-то подобное. – nikdeapen