最近我多次读过两阶段提交很糟糕,但总是作为旁注。所以从来没有一个很好的解释。
其次,我们试图避免两阶段提交,因为它们总是如此 从长远来看会造成问题。
或第563页的Implementing Domain-Driven Design:
基础架构使用第二个ReadRecorts()进行复制 事件,发布它们而不需要两阶段提交,...
我认为实现了两阶段提交以确保多个数据库服务器之间的一致性。
使用两阶段提交时会出现什么问题?为什么避免它们会更好?
答案 0 :(得分:10)
最大的问题是由于2阶段提交协议的阻塞性而导致的可扩展性。
2PC要求参与方之间进行仔细协调:特别是,各方必须承认准备阶段和提交。一旦一方确认它已准备好提交,它就必须阻塞,直到事务协调器发送提交或回滚消息。如果任何一方通过网络,网络延迟会导致节点之间通信的瓶颈。此外,一旦一方确认它已准备好提交,它实际上必须能够事后提交事务,即使它在中间崩溃。这需要检查点到持久性存储(即使之后事务回滚),也可能限制吞吐量。