7

假设分布式事务中涉及的所有数据库都使用两阶段提交信号实现了它们已准备好提交并拥有必要的锁。协调器发出提交信号,所有数据库都执行它们的事务部分,但是一个 SQL 数据库遇到被零除的错误,这是由于编程疏忽而没有考虑到这种可能性。既然协调员已经向每个人发出了承诺信号,那么除以零会发生什么?

4

1 回答 1

7

第二个提交阶段通常不包含可能失败的用户代码。参与的资源管理器需要保证不会发生故障。如果违反此保证,则协议无法提供任何保证。

两阶段提交试图解决两个将军问题。这个问题没有完整的解决方案。TPC 是一个近似值。

TPC 可能失败的另一种方式是在网络分区的情况下。一些资源管理器可能会执行最终提交,但有些可能不会收到该消息。同样,这个问题是无法解决的。即使重试也无法解决。

您甚至可以在现实条件下触发此问题:在压力测试中运行所有参与节点并在任意点拉网线。很有可能您的分布式数据库现在不一致,因为一些提交消息在非常不方便的时候丢失了。

于 2012-06-23T20:19:00.403 回答