шаблоны проектирования транзакционных сервисов с контрольными точками и восстановлением - PullRequest
2 голосов
/ 06 октября 2010

У меня есть многошаговый процесс, где каждый шаг выполняет некоторый сетевой ввод-вывод (вызов веб-службы), а затем сохраняет некоторые данные.Я хочу спроектировать его отказоустойчивым способом, чтобы в случае сбоя службы, либо из-за сбоя системы, либо из-за сбоя одного из шагов, я смог восстановить и перезапустить с последнего безошибочного шага.

Вот как я думаю об этом (это довольно высокий уровень):

  1. Сохраняет состояние каждого шага (NOT_STARTED, IN_PROGRESS, FAILED) в таблице базы данных
  2. Если шаг не выполнен, пометьте его и его зависимый шаг как «СБОЙ» и перейдите к следующему независимому шагу
  3. Восстановите, прочитав эту таблицу (например, в начальной загрузке приложения)

Мне было интересно, есть ли какие-то шаблоны проектирования, структуры и алгоритмы, которые решают эту проблему.

Ответы [ 4 ]

2 голосов
/ 18 октября 2010

Это хороший документ " Шаблоны проектирования для восстановления на основе контрольных точек ", в котором рассматривается проблема.

2 голосов
/ 06 октября 2010

Вы можете рассмотреть шаблон проектирования «Цепочка ответственности»: http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern

0 голосов
/ 06 октября 2010

С точки зрения моделей поведения, я бы порекомендовал рассмотреть следующие, поскольку они кажутся хорошо приспособленными для ваших нужд. Имейте в виду, что этот список основан на очень высоком уровне понимания вашей реализации.

Если вы еще не знакомы, я бы СИЛЬНО рекомендовал поискать шаблоны Model-View-Controller и Model-View-Presenter , так как они сделают ваш опыт разработки более приятным.

Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать. :)

0 голосов
/ 06 октября 2010

Memento (GoF) может использоваться для сохранения состояния перед потенциально сбойным вызовом.

Одно хорошее ключевое слово для поиска будет транзакций .Это позволяет откатить изменения, произошедшие из-за сбоя, до ближайшего «стабильного» состояния.Это одна вещь, которую будет предоставлять ваша БД.

Шаблон команды также имеет известные применения транзакций.

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