我在开发的系统中遇到了一些问题。我有一个python脚本,它首先使用虚拟化软件,如果该操作成功,它会将内容写入数据库。 如果在虚拟化软件中发生了一些异常,那么我可以管理所有事情,但如果插入数据库失败,将会出现真正的问题。如果插入失败,我将不得不恢复该虚拟化软件中的东西,否则事情将变得异步。但问题是,恢复该软件中的东西是不可能的。
如何处理事情以便我可以使数据库与该软件保持同步?任何中间件或特殊应用???还是编程中的任何逻辑?
答案 0 :(得分:1)
您希望系统中的两个操作(OP:您的virt。软件中的操作; WDB:写入数据库)是原子的(要么都发生,要么都没有)。一种分布式事务,但您的虚拟化软件不直接直接支持可交易行为(无回滚)。如果你可以让它们成为某个分布式事务系统的一部分,那么你就完成了(见eg),但这通常是不可能的或不切实际的。获得伪交易行为的不同策略取决于您的场景的细节。一些例子:
只有在您写入DB的内容不依赖于OP操作(不太可能)时才可行。
(可以切换步骤4-5)这将是一个穷人的“两阶段提交”实现。只有在这两个阶段可以划分您的操作时才可行。
这会检查数据库是否正常运行,在尝试实际操作和写入之前进行虚拟写入。可行,但不是万无一失。
声音可悲......但有时这是唯一可行的方法。