Лучшая стратегия для совместного использования периодического задания на ферме
У меня есть проблема здесь. Предположим, у вас есть бизнес-периодическое задание, например, создание баланса каждый месяц. Эта задача может выполняться в ферме, поэтому в случае сбоя компьютера, на котором выполняется периодическая задача, ее необходимо передать на другой компьютер.
Итак, как я могу сохранить периодическое задание и сделать его безопасным на ферме? Я думал в постоянной и общей очереди, но я довольно застрял.
Есть идеи?
Заранее спасибо.
3 ответа
На ваш вопрос не хватает многих факторов. Как вы получаете доступ к задаче? Это веб-сервис? Удаленный вызов процедуры? Он запускается самостоятельно, а затем сохраняет результаты в общей папке?
Если это просто веб-сервисы, то решением может быть просто запросить их по порядку, если один из них недоступен, тогда переходите к следующему... вероятно, rpc можно было бы просто обработать с помощью той же процедуры. Конечно, это не так хорошо масштабируется, и это немного нерегулярно, но это может помочь, если у вас нет времени на что-то еще.
Если у вас есть время и деньги, необходимые для реального масштабирования, вам следует проверить реконфигурацию, которая является основой для типа отказоустойчивости, который вы ищете. Конечно, это будет означать наличие контроллера (машин контроля, как их называет @jldupont), а также большого количества механизма и усилий, чтобы все было вместе.
Оно того стоит, только если оно тебе действительно нужно. Это отличное вложение времени и денег, поэтому не смело делайте это только потому, что это круто.
Не уверен, каков ваш технологический стек, но взгляните на Quartz (или Quartz.net, если вы используете стек.NET). Quartz - это корпоративный планировщик заданий с надежными возможностями отработки отказа / высокой доступности.
Переход от 1 к>1 всегда большой шаг.
Опция 1
Вам понадобится (среди прочего):
- Супервизор машин
- Протокол сердцебиения / обнаружение сбоев
- Протокол выборов для планировщика заданий
- Планировщик заданий
- Отчет о работе
и т.п.
Вариант 2
Просто попросите несколько машин выполнить задание и выберите успешный результат на одном из них (или используйте голосование большинством, если вам это нужно).