Как подтвердить, что одна и та же задача завершена на нескольких экземплярах сервера - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть задание планировщика, которое каждые X минут проверяет, есть ли какой-либо файл на сервере sftp, загружает его, анализирует и загружает файл состояния, в котором говорится, что файл успешно загружен.Если файл не был загружен и проанализирован успешно, мы не загружаем файл состояния.

Файл состояния используется сторонним приложением, которое на основании наличия файла состояния на сервере sftp начинает выполнять какую-то другую работу.Если нет файла состояния, он не запустит задание.

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

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

Некоторые решения:

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

  2. Я думал загрузить файл состояния в неправильном формате (чтобы стороннее приложение не запускало свою работу) с некоторым идентификатором сервера, и это будет подтверждениемчто этот сервер скачал файл.Все остальные серверы также поместят свои идентификаторы в тот же файл.Затем первый сервер, который обнаружит, что по крайней мере 3 раза упомянули одинаковые идентификаторы сервера (3x server1, 3x server2, 3x server3), изменит файл состояния в правильном формате, а затем третье лицо может начать свою работу.Теоретически проблемы могут возникнуть, если в файле было упомянуто 3 раза: server1 и server2, но server3 не был упомянут вообще (все серверы имеют одинаковое выражение cron, как каждые 2 минуты)

  3. Используйте некоторую конфигурацию, где будет определено количество серверов, которые должны загрузить файл, и на основании этой конфигурации я могу проверить, все ли записи записали свои идентификаторы в поддельный файл состояния.Проблемы в том, что если я добавляю новый сервер, мне нужно обновить конфигурационный файл.

Я полагаю, что это общая проблема, и есть какой-то шаблон или алгоритм?

1 Ответ

1 голос
/ 14 апреля 2019

На вашем месте я бы попытался создать «файл интерфейса» между сторонним приложением и серверами sftp.«Интерфейсный файл» будет периодически (каждые X минут) обновляться.Если файлы состояния готовы (все они), то только «файл интерфейса» будет помечен как «готов».Затем отправьте этот «файл интерфейса» в стороннее приложение.

Надеюсь, это поможет вам решить проблему

РЕДАКТИРОВАТЬ: синтаксис

...