【问题标题】:Are XA/JTA transactions still used?是否仍在使用 XA/JTA 事务?
【发布时间】:2023-03-18 01:55:01
【问题描述】:

我有一个与多个数据库和一些自定义服务交互的应用程序。对于某些操作,我需要类似事务的行为,其中一组更改要么跨所有数据库/服务提交,要么在发生错误时全部回滚。

来自 X/Open 组的 XA 标准和 Java JTA 似乎使用两阶段提交过程准确地解决了这个问题。一些数据库(mySQL、Postgres、Oracle)支持这些接口,但我感觉它们不经常使用或流行度下降。真的吗?如果是,为什么?

我知道 mySQL 上的 XA 存在一些与复制相关的问题。此外,XA 事务可能会明显变慢。 XA 不受欢迎/不常见还有其他原因吗?

【问题讨论】:

  • XA 仅适用于所有(或除一个之外的所有)数据源都支持两阶段提交的情况。 2PC 有一些开销,需要更多的监控来确保放弃的准备提交不会留下来阻塞数据库。当您需要跨多个系统的事务行为时,它非常有用,但如果您不需要,最好避免以降低复杂性。

标签: mysql postgresql jta distributed-transactions xa


【解决方案1】:

XA 有几点:

  • 它完成了它的工作,没有可接受的替代方案。如果你必须使用分布式事务,那么 XA 是没有办法的。
  • 这是“标准技术”,没有炒作,也没有营销。因此,它在大多数人的雷达范围内飞行。
  • 即使使用它,Jack Application Developer 也很有可能不知道它,因为大多数部分通常隐藏在某些框架中。
  • 对 XA 的需求确实有所下降,因为面向服务的架构 (SOA) 和消息队列是被炒作的架构范例,试图避免子系统的这种紧密耦合。尽管至少 SOA 似乎也在下降得很好。 ;-)
  • XA 中经常被遗忘的部分是事务实际中断时使用的必需代码和工具。在 XA 的某些郊区,事务管理器在相当长的一段时间内既不能提交也不能回滚所有资源。这一点只会增加“只有在你真的必须使用它”这一点。

【讨论】:

  • 其实第二点是不正确的。如果您使用两个 Oracle 数据库并对两个 Oracle 数据库进行更改,则不需要 XA。
  • @Steve:我很困惑:第二点是关于炒作和营销。但是你的 cmets 的后半部分更符合关于“没有接受替代方案”的第一点。我没有说地球上没有其他选择,只有大多数其他数据库也支持。另外: XA 的一个关键点是,没有“大师”DB,只有场上平等的球员加上一名裁判(TX 经理)。使用 DB-Link,所有参与者都必须同意一个“主”数据库,该数据库设置了链接,因此是单点故障。所以在我看来,这并不是真正的“分布式”。
  • 您正在假设一个完全错误的分布式事务不等于使用 XA。
  • @Steve:你是对的,对于同构系统,也有供应商特定的解决方案。但是对于异构系统,我不知道在实践中符合要求的任何其他技术。你呢?
【解决方案2】:

它们仍然用于您所提到的内容。如果对其中一个数据库的操作失败,那么它会全部回滚。

它们速度较慢,因此如果不需要 XA(即它是自主操作或非事务性操作),则不应使用它。

在处理多个 DB 时,Java EE 容器甚至可能会强制您使用 XA 数据源。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多