В настоящее время у нас работает пакетный процесс, который выполняется каждые 15 минут, и каждый раз, когда он запускается, он повторяет этот цикл несколько раз:
- Вызывает sproc и возвращает некоторые данные из БД
- Обработка данных
- Сохраняет результат обратно в БД
Невозможно загрузить все данные за один раз, поскольку данные разделены по ряду полей, и каждая группа данных требует различного поведения во время обработки (настраивается из внешнего интерфейса).
Однако недавние изменения в бизнесе привели к внезапному увеличению объема данных (и, следовательно, необходимого времени обработки) для некоторых групп, поэтому теперь, когда одна из групп выходит за границы, она задерживает все остальные группы.
Наш план состоит в том, чтобы распараллелить этот процесс на нескольких машинах так, чтобы:
- есть центральный контроллер (ведущий) и несколько рабочих станций (ведомых)
- мастер отвечает за планирование прогонов (настраивается из внешнего интерфейса)
- ведущий (или отдельный компонент) отвечает за загрузку / сохранение данных в и из БД (во избежание взаимных блокировок / конфликтов между несколькими ведомыми)
- подчиненные получают рабочие элементы, обрабатывают их и возвращают результаты мастеру
- есть основной подчиненный (основной производственный сервер в нашей среде), который обычно получает все рабочие элементы
- вторичные ведомые будут получать работу только в том случае, если первичный ведомый работает в группе, которая требует более длительного времени обработки (мастер может определить это по размеру возвращаемых данных или его можно оставить для настройки)
- если ведомое устройство выдает исключение во время обработки, электронное письмо с предупреждением отправляется в службу поддержки, и тот же рабочий элемент выбирается во время следующего цикла расписания
- пока не уверен, что делать с таймаутами
Я провел некоторое исследование шаблона Master-Slave для распределенной среды, но до сих пор не нашел много справочных материалов, кто-нибудь здесь знает о хорошей реализации такого шаблона? Любые указатели на потенциальные подводные камни такой архитектуры также будут высоко оценены!
Спасибо