我在開發系統時遇到了一些問題。我有一個python腳本,它首先與一個virtulisation軟件一起工作,如果這個操作成功了,它將把事情寫入數據庫。 如果在虛擬化軟件中發生了一些異常,我可以管理所有東西,但是如果在數據庫中插入失敗,則會出現真正的問題。如果插入失敗,我將不得不在該虛擬化軟件中還原事物,否則事情將變爲異步。但問題是,在軟件中恢復的東西是不可能的。數據庫同步
如何處理事情,以便我可以保持數據庫與該軟件同步?任何中間件或特殊應用程序?或編程中的任何邏輯?
我在開發系統時遇到了一些問題。我有一個python腳本,它首先與一個virtulisation軟件一起工作,如果這個操作成功了,它將把事情寫入數據庫。 如果在虛擬化軟件中發生了一些異常,我可以管理所有東西,但是如果在數據庫中插入失敗,則會出現真正的問題。如果插入失敗,我將不得不在該虛擬化軟件中還原事物,否則事情將變爲異步。但問題是,在軟件中恢復的東西是不可能的。數據庫同步
如何處理事情,以便我可以保持數據庫與該軟件同步?任何中間件或特殊應用程序?或編程中的任何邏輯?
您希望系統中的兩個操作(OP:操作在您的virt軟件中; WDB:寫入數據庫)爲原子操作(兩者都發生,或者都不發生)。一種分佈式事務,但是您的虛擬化軟件不直接支持可交易行爲(不回滾)。如果你可以讓它們成爲一些分佈式事務系統的一部分,你就完成了(見eg),但這通常是不可能或不切實際的。獲得僞交易行爲的不同策略取決於您的場景的具體情況。一些例子:
只有寫入數據庫的內容不依賴於OP操作(不太可能)纔可行。
(步驟4-5可切換)這將是一個口服或者是人的「兩階段提交」實現。只有在這兩個階段你才能分開你的手術。
這會檢查DB是可操作,在嘗試真正的操作和寫作之前做一個虛擬的寫作。可行,但不是萬無一失。
聲音可憐......但有時這是唯一可行的辦法。
不錯的答案..我會選擇倒數第二.. – adityap