2014-11-24 42 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

相关问题