我遇到了一种情况,我开始怀疑两阶段提交协议是否真的保证了ACID属性,特别是它的"A"部分.
让我们看一下涉及2个资源的理论分布式事务.(更多关于我必须处理的问题的实际描述可以在我的博客中找到).该场景是分布式事务的正常执行(无故障或恢复).应用程序启动事务,更新两个资源并发出commit()调用.提交完成后,应用程序将检查两个资源并查看已完成事务的所有更改.一切都很好,2PC协议完成了它的工作,对吧?
现在,对场景进行了一些小改动.当分布式事务正在执行commit()时,另一个应用程序将使用相同的2个资源.它只能看到交易的部分变化吗?假设,对第二个资源的更改尚未可见时,对一个资源的更改已经可见?
在我阅读过2PC协议的所有信息中,我找不到任何关于各个资源相对于彼此的变化可见性的保证.我找不到任何说明所有资源在同一时间完成各自提交的内容.