【发布时间】:2018-11-03 12:21:22
【问题描述】:
许多 DBMS 使用称为“XA”的特殊 2PC 协议进行分布式事务。为什么有人会使用 XA?对我来说,XA 不能保证万一发生故障:
在 XA 中,事务管理器 (TM) 会在 first 阶段告诉所有 DBMS 准备,如果都准备好,TM 会告诉所有 DBMS 在 第二阶段,否则如果其中任何一个失败,TM会告诉其他人回滚。
如果所有 DBMS 都在第一阶段准备好,如果有人在第二阶段提交失败怎么办?在这种情况下,整个事务将失败,所有其他事务都必须回滚(第三阶段?),使第一阶段毫无意义。也就是说,第一阶段不能保证所有的DBMS都准备好了(不过确实增加了一些成功的可能性)。
【问题讨论】:
-
请将您的问题集中在一件事上。您当前的问题有点模糊且过于广泛;您的问题的标题似乎也没有涵盖您的问题的主体:将它们排成一行。
-
无论如何,您的前提是错误的,分布式事务要求准备足以使提交成功,如果不是,则资源无法正确参与分布式事务。只有资源不可用可能是一个问题(但必须有一种方法可以恢复,以便最终可以完成提交)。
-
@MarkRotteveel 已编辑。
标签: mysql transactions xa