关于another post of mine,我意识到在分布式,XA事务及其内部相关的stackoverflow上我们可以说的更多。普遍的看法是分布式交易很慢。
XA交易的内部结构是什么?我们如何调整它们?
答案 0 :(得分:3)
首先让我们放一些常用的词汇。我们有两个或更多的派对
让我们重点介绍在XA事务期间执行的主要API函数。 - 开始(XID) - 结束(XID) - 准备(XID) - commit(XID)
前两个操作在我们的源代码中可见。这是当我们启动事务做一些工作然后说提交。一旦我们从源代码发送提交消息,事务协调器和事务参与者就会接管并做一些工作。
XID参数用作标识事务的唯一键。每个交易协调员和每个参与者在任何时候都可以参与多个交易,因此需要这样才能识别它们。 XID有两部分,一部分标识全局事务,第二部分标识参与者。这意味着同一事务中的每个参与者都将拥有自己的子标识符。 一旦我们到达事务准备阶段,每个事务参与者将其工作写入事务日志,并且每个事务参与者(XARersource)在其部分为OK或FAILED时进行投票。收到所有投票后,交易即被提交。 如果电力下降,交易协调人和交易参与者都会保持其交易日志持久并且可以推测他们的工作。如果其中一个参与者在事务提交期间投票失败,则将启动后续回滚。
表现方面的影响
根据CAP定理,每个应用程序(功能)都介于由一致性,分区和可用性定义的三元组之间。 XA / Distributed事务的主要问题是它需要极端的一致性。
此要求会导致非常高的网络和磁盘IO活动。
磁盘活动事务协调器和事务参与者都需要维护事务日志。此日志保存在磁盘上,每个事务需要强制使用此磁盘日志信息,此信息不是缓冲信息。具有大的并行性将导致在每个事务日志中强制进入磁盘的大量小消息。 Normaly如果我们将一个1GB文件从一个硬盘复制到另一个硬盘,这将是非常快速的操作。如果我们将文件分成1 000 000个字节,每个文件传输速度极慢。
磁盘强制随着参与者数量的增长而增长。
1参与者被威胁为正常交易
2名参与者 磁盘强制是5
3等于7
网络活动 为了为分布式XATransaction绘制一个并列,我们需要将它与某些东西进行比较。正常交易期间的网络活动如下。 3次网络旅行-enslist事务,发送一些SQL,提交。
对于XA事务,这是一个更复杂的想法。如果我们有2个参与者。 我们在事务2网络旅行中招募资源。然后我们发送准备消息另外2次旅行,然后我们提交另外2次旅行。
2个资源发生的实际网络活动越多,您参与交易的参与者就越多。
关于如何快速获得分布式交易的结论
我的回答是基于我在“ XA暴露”(以及个人经历)中所读到的内容,该内容已经在互联网上不再可用,这引发了我的写作。