2014-11-24 64 views
5

好的,所以我有一個Spring應用程序,它接受網絡表示並引導虛擬機來表示已通過的網絡。什麼是「回滾」更改的最佳方式?

它使用低級別的API來啓動虛擬機,沒有數據庫參與其中。

我需要弄清楚如何做的是處理情況,用戶提交一個10節點的情況下(或任意數量的)網絡模型和應用經過並建立網絡(啓動虛擬機),如果一個節點出現故障要啓動我希望能夠對此做出反應。我希望能夠回滾我的更改(即銷燬所有創建的節點)。

我被告知需要查看「事務」,但我不確定當我不使用數據庫時是否適用於此場景。

作爲一個方面說明,如果用戶發送請求,我確實有邏輯取下節點。

我的問題是 - 我該如何處理?

此外,這是這個問題最好的堆棧溢出嗎?

+0

只有一個堆棧*溢出*,是的,這似乎是適當的堆棧* Exchenge *這個問題:)順便說一句,這是一個很好的。我的直覺就是利用現有的'Transaction'框架 - 因爲正如你所暗示的那樣,它的目的就是爲了完成你在這裏討論的內容,但是關於數據庫操作。我懷疑你可以適應它,使它在這裏也適合你。 – drewmoore 2014-11-24 21:37:02

+1

也許[計算機科學StackExchange](http://cs.stackexchange.com/)是一個更好的選擇。 – hfontanez 2014-11-24 22:11:07

+0

哎呀!我的道歉,我的意思是「StackExchange」:) – envinyater 2014-11-24 22:29:54

回答

4

您似乎在尋找交易行爲,特別是針對原子性(「全部或全部」)。但通常「交易」意味着某些保證(特別是圍繞ACID特性),在涉及分鐘級的人級時間尺度的情況下難以或不可能實現。

也許「工作流程與補償錯誤」更符合您的需求。

我會手動實現這個,也許工具支持(例如工作流引擎)。啓動一個進程以生成網絡,並跟蹤當前進度,如創建的虛擬機,正在進行的虛擬機等。如果有錯誤需要回滾,則需要另一個進程執行清理。清理過程本身的行爲本身可能會失敗,因此它可能會重複執行其幾個步驟,然後生成一個報告,指出「此清理步驟失敗」。

如果存在共享資源,那麼您還需要實現某種隔離機制。有時候這很容易 - 例如,DHCP可以幫助您避免重複的IP。如果你正在更新一個DNS區域文件,那麼你想要同步訪問,以避免併發寫入。等

+0

我想我同意你,威利惠勒。 – hfontanez 2014-11-24 22:06:18

相關問題