2011-06-27 8 views
0

開発中のシステムに問題があります。私は最初にvirtulisationソフトウェアで動作し、その操作が成功すると、データベースに物事を書き込む1つのpythonスクリプトを持っています。 仮想化ソフトウェアでいくつかの例外が発生した場合は、すべてを管理できますが、データベースに挿入すると実際の問題が発生します。挿入が失敗した場合、その仮想化ソフトウェアの中にあるものを元に戻す必要があります。そうしないと、非同期になります。しかし、問題は、そのソフトウェアのものを元に戻すことは常に可能ではないということです。データベース同期

私はそのソフトウェアと同期してデータベースを維持できるように物事を扱う方法は?どんなミドルウェアや特別なアプリケーション?またはプログラミングのロジック?

答えて

1

あなたのシステムには2つのアクションが必要です(OP:あなたのvirt。ソフトウェアでの操作; WDB:データベースへの書き込み)。分散トランザクションの種類ですが、仮想化されたソフトウェアはトランザクション可能な動作(ロールバックなし)を直接サポートしません。分散トランザクションシステムの一部にすることができれば、完了します(eg参照)が、これは不可能でも実用的でもないことがよくあります。疑似トランザクションの動作を達成するためのさまざまな戦略は、シナリオの詳細によって異なります。いくつかの例:


  1. オープンTX(DB内のトランザクション)
  2. WDB
  3. OP
  4. OPが成功した場合は、TXをコミットし、他のロールバックTX。

DBに書き込むものがOPの操作に依存しない(不可能な)場合にのみ実行可能です。


  1. OP1(操作の第一段階:あなたは結果を得るが、何も変更しない)
  2. オープンTX
  3. WDB
  4. OP2(第2段階:あなたはのvirtを変更します。 sofware)
  5. TXをコミットまたはロールバック

(ステップ4-5これはPOだろう)切り替えることができますまたは "2フェーズコミット"の実装の人。これらの2つの段階で作業を分けることができる場合にのみ実行可能です。


  1. オープンTX
  2. ダミーWDB(DBダミー結果を書き込む)
  3. ロールバックTX
  4. OP
  5. WDB

これはDBが動作していることを確認実際の操作と書き込みを試みる前に、ダミーの書き込みを行います。実行可能ですが、絶対確実ではありません。


  1. OP
  2. WDB
  3. 失敗した場合:、生データをファイルに保存し、エラーをログに記録し、ITにメールを送って、上の赤いライトをオンにします。

音が哀れです...しかし時にはそれは唯一の実行可能な方法です。

+0

素敵な答え..私は最後に2番目を選びます。 – adityap