Паттерн Master-Slave для распределенной среды - PullRequest
1 голос
/ 19 ноября 2009

В настоящее время у нас работает пакетный процесс, который выполняется каждые 15 минут, и каждый раз, когда он запускается, он повторяет этот цикл несколько раз:

  1. Вызывает sproc и возвращает некоторые данные из БД
  2. Обработка данных
  3. Сохраняет результат обратно в БД

Невозможно загрузить все данные за один раз, поскольку данные разделены по ряду полей, и каждая группа данных требует различного поведения во время обработки (настраивается из внешнего интерфейса). Однако недавние изменения в бизнесе привели к внезапному увеличению объема данных (и, следовательно, необходимого времени обработки) для некоторых групп, поэтому теперь, когда одна из групп выходит за границы, она задерживает все остальные группы.

Наш план состоит в том, чтобы распараллелить этот процесс на нескольких машинах так, чтобы:

  • есть центральный контроллер (ведущий) и несколько рабочих станций (ведомых)
  • мастер отвечает за планирование прогонов (настраивается из внешнего интерфейса)
  • ведущий (или отдельный компонент) отвечает за загрузку / сохранение данных в и из БД (во избежание взаимных блокировок / конфликтов между несколькими ведомыми)
  • подчиненные получают рабочие элементы, обрабатывают их и возвращают результаты мастеру
  • есть основной подчиненный (основной производственный сервер в нашей среде), который обычно получает все рабочие элементы
  • вторичные ведомые будут получать работу только в том случае, если первичный ведомый работает в группе, которая требует более длительного времени обработки (мастер может определить это по размеру возвращаемых данных или его можно оставить для настройки)
  • если ведомое устройство выдает исключение во время обработки, электронное письмо с предупреждением отправляется в службу поддержки, и тот же рабочий элемент выбирается во время следующего цикла расписания
  • пока не уверен, что делать с таймаутами

Я провел некоторое исследование шаблона Master-Slave для распределенной среды, но до сих пор не нашел много справочных материалов, кто-нибудь здесь знает о хорошей реализации такого шаблона? Любые указатели на потенциальные подводные камни такой архитектуры также будут высоко оценены!

Спасибо

1 Ответ

0 голосов
/ 19 ноября 2009

Ваша конструкция Master / Slave, представленная выше, по-видимому, подразумевает, что записи в базу данных все равно будут сериализованы, поэтому вы рассматривали возможность простого запуска нескольких копий текущего процесса параллельно (например, путем создания нового процесса для каждого задания) и управления конфликт через общую блокировку приложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...