2

各ステップでネットワークIO(Webサービス呼び出し)を実行してからデータを永続化するマルチステッププロセスがあります。システムクラッシュまたはいずれかのステップの失敗が原因でサービスが失敗した場合に、最後のエラーのないステップから回復して再開できるように、フォールトトレラントな方法で設計したいと思います。

これが私がこれに対処することをどのように考えているかです(これはかなり高いレベルです):

  1. 各ステップの状態(NOT_STARTED、IN_PROGRESS、FAILED)をデータベーステーブルに保存しました
  2. ステップが失敗した場合は、そのステップとその依存ステップを「失敗」としてマークし、次の非依存ステップに移動します
  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

Memento(GoF)を使用して、コールが失敗する可能性がある前の状態を保存できます。

検索するのに適したキーワードの1つは、トランザクションです。これにより、障害が原因で発生した変更を最も近い「安定した」状態にロールバックできます。これは、DBが提供するものの1つです。

コマンドパターンには、トランザクションの既知の使用法もあります。

于 2010-10-06T18:12:59.217 に答える
0

動作設計パターンに関しては、ニーズに十分に対応しているように見えるので、以下を調べることをお勧めします。このリストは、実装に関する非常に高度な理解に基づいていることに注意してください。

  • テンプレートメソッド-プログラムスケルトンを定義するため
  • 戦略-必要に応じてアルゴリズムを交換するため
  • Memento-オブジェクトを以前の状態に復元するため
  • 状態-mementoパターンと相まって

まだ慣れていない場合は、 Model-View-ControllerパターンとModel-View-Presenterパターンを調べることを強くお勧めします。これらのパターンを使用すると、開発エクスペリエンスがはるかに楽しくなります。

フォローアップの質問がある場合は、お気軽にお問い合わせください。:)

于 2010-10-06T18:26:53.750 に答える