两阶段提交和合并执行和准备阶段

时间:2012-11-18 05:00:19

标签: distributed-transactions xa 2phase-commit

据我所知,在两阶段提交之前甚至需要进行往返通信以将事务发送到每个站点。每个站点都要处理它们的部分事务,当协调器从所有站点获得响应时,它会运行两阶段提交。这启动了准备阶段等。

为什么必须将准备阶段与两阶段提交之前的执行分开?是否有理由不合并执行和准备阶段,从而削减往返通信费用?

这是我之前question的后续内容。

1 个答案:

答案 0 :(得分:0)

这样做有几个很好的理由:

  1. 操作可能需要其他站点的数据。如果合并执行并准备阶段,如何在不同站点的数据项之间实现交换(a,b)操作?
  2. 协调员很可能成为性能瓶颈。合并执行和提议阶段将涉及中继应用程序数据,进一步使其过载。
  3. 透明度和封装。请注意,对previous question的回复(即业务逻辑)中的begin / commit之间的代码根本不涉及分布式事务。它不需要知道涉及哪些网站,甚至多少网站!它调用可能(或不是......)远程调用未知站点的任意过程。要合并执行并做好准备,您必须在每个参与者的独立回调中明确打包您的应用程序逻辑。
  4. 此外,在考虑涉及持久性的性能时,您应该关注意味着刷新日志的往返。执行阶段的调用不需要刷新日志,因此应该比准备和提交阶段便宜得多。