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