Dom*_*see 9 database transactions commit 2phase-commit cqrs
最近我多次读过两阶段提交很糟糕,但总是作为旁注.所以从来没有一个很好的解释.
例如在CQRS之旅第5章:
其次,我们试图避免两阶段提交,因为它们总是会导致长期问题.
或者在实施域驱动设计(第563页)中:
第二个ReadRecorts()被基础结构用于复制事件,发布它们而不需要两阶段提交,...
我认为实现了两阶段提交以确保多个数据库服务器之间的一致性.
使用两阶段提交时会出现什么问题?为什么避免它们会更好?
Ale*_*ger 10
由于2阶段提交协议的阻塞性质,最大的问题是可伸缩性.
2PC需要参与方之间的仔细协调:特别是,每一方都必须承认准备阶段和提交.一旦一方确认它已准备好提交,它就必须阻塞,直到事务协调器发送提交或回滚消息.如果任何一方通过网络,则网络延迟会导致节点之间通信的瓶颈.
此外,一旦一方确认它已准备好提交,它实际上必须能够事后提交事务,即使它在中间崩溃.这需要检查点到持久性存储(即使之后事务回滚),也可能限制吞吐量.
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |