【问题标题】:Performance tuning of Distributed ( XA ) transaction - How?分布式 ( XA ) 事务的性能调优 - 如何进行?
【发布时间】:2018-08-13 01:03:30
【问题描述】:

关于another post of mine,我意识到,关于分布式、XA 事务及其内部,我们可以在 stackoverflow 上说更多。普遍的看法是分布式事务很慢。

什么是 XA 事务内部,我们如何调整它们?

【问题讨论】:

  • 减号投给什么?还有关闭请求?
  • 您实际上并没有提出问题,您只是发布了一份意向声明来介绍您的答案。您还标记了 java 和 .net(它们没有重叠),而您的答案并不具体,并且可以适用于任何语言/平台。
  • 这本来适合文档(stackoverflow.com/documentation),但不幸的是,它已被关闭。作为一个问题,它不太适合,因为您没有提出可回答的问题(除了要求资源)。也许您可以在某个地方发布类似 wiki 的资源?
  • @ErwinBolwidt 问题是,分布式事务的幕后算法是什么。我不确定你会解释这个问题有什么问题?我发现只有一个资源可以详细介绍这个主题,现在它已经关闭了。 XA 暴露。
  • 在您关闭它之前,我会用更精确的定义更改问题。我的意图是将内容分成两个问题。

标签: java database transactions xa atomikos


【解决方案1】:

首先让我们介绍一些常用词汇。我们有两个或更多的聚会

  • 事务协调器这是我们的业务逻辑所在。这是协调分布式事务的一方。
  • Transaction Participant (XAResource) 这可以是任何支持分布式事务的 Dababase 或其他支持 XA 协议的实体,如消息传递服务。

让我们重点介绍在 XA 事务期间执行的主要 API 函数。 - 开始(XID) - 结束(XID) - 准备(XID) - 提交(XID)

前两个操作在我们的源代码中可见。这是我们启动事务做一些工作然后说提交的时候。一旦我们从源代码发送提交消息,事务协调器和事务参与者就会接管并做一些工作。

XID 参数用作标识交易的唯一密钥。每个事务协调者和每个参与者在任何时候都可以参与多个事务,因此需要这样做才能识别它们。 XID 有两部分,一部分标识全局事务,第二部分标识参与者。这意味着同一事务中的每个参与者都将拥有自己的子标识符。 一旦我们到达事务准备阶段,每个事务参与者都会将其工作写入事务日志,并且每个事务参与者(XARersource)都会投票决定其部分是 OK 还是 FAILED。一旦收到所有投票,事务就被提交。 如果断电,事务协调器和事务参与者都会保持其事务日志的持久性并可以假定他们的工作。如果其中一位参与者在事务提交期间投票失败,则将启动后续回滚。

对性能的影响

根据 CAP 定理,每个应用程序(功能)都介于一致性、分区和可用性定义的三角形之间。 XA/分布式事务的主要问题是它需要极高的一致性。

此要求会导致非常高的网络和磁盘 IO 活动。

磁盘活动 事务协调者和事务参与者都需要维护事务日志。此日志保存在磁盘上,每个事务都需要强制使用此磁盘日志的信息,此信息不是缓冲信息。具有大的并行性将导致在每个事务日志中强制到磁盘的大量小消息。通常,如果我们将一个 1GB 的文件从一个硬盘复制到另一个硬盘,这将是非常快的操作。如果我们将文件分成 1 000 000 个部分,每个部分包含几个字节,则文件传输将非常缓慢。

磁盘强制随着参与者数量的增加而增加。

1 个参与者被视为正常交易
2 名参与者 磁盘强制为 5
3 等于 7

网络活动 为了绘制分布式 XATransaction 的平行线,我们需要将其与某些东西进行比较。正常交易期间的网络活动如下。 3 次网络旅行 - 登记事务,发送一些 SQL,提交。

对于 XA 事务,这是一个更复杂的想法。如果我们有 2 个参与者。 我们在事务 2 网络旅行中征集资源。然后我们发送准备消息另外 2 次旅行,然后我们提交另外 2 次旅行。

您在事务中登记的参与者越多,发生在 2 个资源上的实际网络活动就越多。

关于如何快速获得分布式事务的结论

  • 要做到这一点,您需要确保您拥有一个快速且延迟最小的网络
  • 确保您的硬盘具有最小延迟和最大随机写入速度。一个好的SSD可以创造奇迹。 -尝试在事务中争取尽可能少的分布式资源
  • 尝试将您的数据分为对一致性和可用性要求高的数据(实时数据)和对一致性要求低的数据。实时数据使用分布式事务。对于离线数据,使用正常交易,如果您的数据不需要,则不使用交易。

我的回答基于我在“XA 暴露”(和个人经验)中所读到的内容,这似乎在互联网上不再可用,这促使我写了这篇文章。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
相关资源
最近更新 更多