两阶段提交会导致什么问题?

问题描述 投票:0回答:2

最近我多次读到两阶段提交很糟糕,但总是作为旁注。所以从来没有一个很好的解释。

例如在 CQRS 旅程第 5 章中:

其次,我们试图避免两阶段提交,因为它们总是 从长远来看会造成问题。

或者在第 563 页的实现领域驱动设计

第二个 ReadRecorts() 被基础设施用来复制 事件,无需两阶段提交即可发布它们,...

我认为实现两阶段提交是为了确保多个数据库服务器之间的一致性。

使用两阶段提交时会出现哪些问题?为什么最好避免它们?

database transactions commit cqrs 2phase-commit
2个回答
13
投票

由于两阶段提交协议的阻塞性质,最大的问题是可扩展性。

2PC 需要参与方之间的仔细协调:特别是,每一方都必须承认准备阶段和提交。一旦一方确认已准备好提交,它就必须阻塞,直到事务协调器发送提交或回滚消息。如果任何一方通过网络,网络延迟会导致节点之间的通信出现瓶颈。

此外,一旦一方确认已准备好提交,它实际上必须能够在之后提交事务,即使它在中间崩溃了。这需要对持久性存储进行检查点(即使事务随后回滚),并且还可能限制吞吐量。


0
投票

有2个站点 第一阶段:

  1. 协调站点和2.是队列站点和协调站点并在执行写入后发送到队列站点,他们回复协调站点和协调方对队列响应做出决定并将其发送到完成的队列来自队列的消息和确认收到了协调员。

第二阶段: 现在有2个问题1.队列失败2.坐标失败 当坐标失败时,队列站点会等待,直到坐标端从故障中恢复..并且出现称为两阶段提交块问题的问题...(以及更多..)

© www.soinside.com 2019 - 2024. All rights reserved.