2

我有一个多步骤过程,其中每个步骤都会执行一些网络 IO(Web 服务调用),然后保留一些数据。我想以容错的方式设计它,以便如果服务失败,无论是因为系统崩溃还是其中一个步骤失败,我都能够从最后一个无错误步骤恢复并重新开始。

这是我正在考虑如何解决这个问题(这是相当高的水平):

  1. 将每个步骤的状态(NOT_STARTED、IN_PROGRESS、FAILED)存储在数据库表中
  2. 如果步骤失败,将其及其相关步骤标记为“FAILED”并移至下一个非相关步骤
  3. 通过读取此表进行恢复(例如在应用程序的引导部分中)

我想知道是否有一些设计模式、框架和算法可以解决这个问题。

4

4 回答 4

2

您可以考虑责任链设计模式:http ://en.wikipedia.org/wiki/Chain-of-responsibility_pattern

于 2010-10-06T17:46:39.030 回答
2

这是一篇很好的论文,“基于检查点的恢复的设计模式”,它解决了这个问题。

于 2010-10-18T15:14:25.670 回答
0

在行为设计模式方面,我建议您研究以下内容,因为它们似乎可以满足您的需求。请记住,此列表基于对您的实施的非常高级的理解。

如果您还不熟悉,我强烈建议您查看Model-View-ControllerModel-View-Presenter模式,因为它们会让您的开发体验更加愉快。

如果您有任何后续问题,请随时提出。:)

于 2010-10-06T18:26:53.750 回答
0

Memento (GoF) 可用于在可能失败的调用之前存储状态。

搜索的一个好关键字是交易。这允许您将因故障而发生的更改回滚到最近的“稳定”状态。这是您的数据库将提供的一件事。

命令模式也有事务的已知用途。

于 2010-10-06T18:12:59.217 回答