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