ロールバック機能を備えたアプリケーションを設計する方法


9

私は現在、ロールバック機能を処理する必要のあるアプリケーション(基本的には、ユーザー定義のジョブを実行し、リアルタイムで出力を生成できる一種の実行エンジン)に取り組んでいます。それは奇妙に聞こえるかもしれませんが、アプリケーションでそのようなことをすることは可能ですか?レベル?たとえば、一部のユーザーがジョブJ1を実行しようとし、実行を開始した後、編集/変更したいと考えた場合、

つまり、現在実行中のジョブを
強制終了する必要があることを意味します。これまでに実行されたすべてのアクションを元に戻し、
再度実行する必要があります。 ジョブJ1を再度実行します

私の頭に浮かぶいくつかのことは、とにかくアプリケーションの状態をどこかで何らかの形で保存または維持してから、以前の保存ポイントと共にロールバックスタッフを呼び出す必要があるということです。私はDBレベルのロールバックに関する記事をいくつか読んでいましたが、リアルタイム環境で作業する必要があるため、シナリオはこの場合には適合しません。

しかし、どのように進めるか、他に何を考慮に入れるべきかについて、適切なアプローチを見つけることができません。これが不明瞭に聞こえる場合はお知らせください。可能であれば詳細をお知らせします。

ヘルプやアドバイスはありますか?



1
ほとんどのデータベースは、トランザクションメカニズムによるロールバックを提供します。すべての状態をDBに保存できれば、それを使用できます。
Pieter B

何を保存するか、いつ保存するかを定義する際に考慮すべき要素は何ですか?
user2720864 2013

明確にできますか:トランザクションの観点からロールバックが必要ですか(ジョブが完了したかどうかにかかわらず、ジョブの結果の一部がない)、または元に戻す機能が必要ですか?
Bart van Ingen Schenau

2
新しい質問をするために質問を編集しないでください。これを参照する新しい質問を投稿してください。ありがとうございました。
maple_shaft

回答:


18

リアルタイムシステムであるかどうかに関係なく、メモリーメントパターンは開始するのに最適な場所です。

mementoパターンは、オブジェクトを以前の状態に戻す機能(ロールバックによって元に戻す)を提供するソフトウェア設計パターンです。
記念品パターンは、3つのオブジェクト(実装者、管理人、および記念品)を使用して実装されます。
オリジネーターは、内部状態を持つオブジェクトです。
世話人はオリジネーターに何かをしようとしていますが、変更を元に戻せるようにしたいと考えています。世話人は最初に発信者に記念品オブジェクトを要求します。次に、実行しようとした操作(または一連の操作)を実行します。
操作の前の状態にロールバックするために、それはmementoオブジェクトをオリジネーターに返します。
記念品オブジェクト自体は不透明なオブジェクトです(管理人が変更できない、または変更すべきではないオブジェクト)。
このパターンを使用する場合、発信者が他のオブジェクトまたはリソースを変更する可能性がある場合は注意が必要です。メモリメントパターンは単一のオブジェクトで動作します。

いくつかのアイテムに焦点を当てるために、ウィキペディアの記事を少し解散しました。

シナリオでは、オリジネーターがプライマリアプリケーションコードになります。おそらく、ジョブが登録されて処理が開始される時点です。

世話人はあなたが作成する必要があるものであり、ある種のロギングシステムや他のデータストアかもしれません。

記念品は、元に戻すおよび/またはやり直す必要がある関連情報になります。これは、処理キューに戻すことができるある種のジョブの説明のように見えると思います。

ジョブからの既存の変更をJ1データベーストランザクションでラップできる場合は、ロールバックの問題に対処できます(all the action taken so far must be reverted)。トランザクションのロールバックが発生すると、ジョブを再キューイングするために、世話人の呼び出しをトリガーしますJ1

心に留めておくべきことの1つは、Wikipediaの要約の最後の警告です。変更がアトミックであり、それらがまとまったセットとして適用またはロールバックできることを確認する必要があります。

リアルタイム環境にいることが、記念品パターンの実装方法に大きな影響を与えるかどうかはわかりません。アクティビティの期限がある場合は、システムが適切な時間内に応答するようにするために、変更の一部をプロファイルする必要がある場合があります。最初に機能を実装してから、他のアプリケーション要件を満たしていることを確認します。あなたがこれまで述べてきたことを無効にするような何かに遭遇するとは思いません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.