1

有没有很好的 C++ 框架来实现 XA 分布式事务?

术语“好”是指可用、简单(并不意味着“容易”)、结构良好。

由于学习原因,目前我正在按照 X/Open XA 规范进行个人实现。

先感谢您。

4

3 回答 3

2

我不知道有任何成熟度的开源或免费事务监视器,尽管这个链接确实有一些扇出。现有的商业产品是BEA 的 Tuxedo、 Tibco 的Enterprise Message Service(实际上是一个像 IBM 的 MQ 一样的事务性消息队列管理器)和 Transarc 的Encina(现在归 IBM 所有)。这些系统都非常昂贵。

如果您想自己制作(顺便通过填补开源软件领域的空白来为自己赢得一点名气),请获取Gray and Reuter的副本。这是关于事务处理系统架构的权威著作,由该领域的两位最重要的专家撰写。

有趣的是,他们声称可以在大约 10,000 行 C 中实现一个有效的 TP 监视器。这实际上听起来很合理,因为它所做的并不是那么复杂。有时我很想尝试。

本质上,您需要创建一个作为守护进程运行的分布式事务协调器。您将需要让资源管理器协议从中工作,因此将其作为原型开始可能是一个好的开始。如果您可以让它独立回滚或提交事务,那么您就有了 TM-RM 接口的基础。

规范中定义的 XA API 是控制事务管理器的 API。严格来说,你不需要创建一个 3 层架构来使用这种分布式事务,但是如果没有 TP 监视器,它们或多或少是没有意义的。您如何从前端到中间层进行通信可以留给读者作为练习。您可能最好使用现有的 ORB,其中有几个很好的开源实现可用。

根据您是否要使 DTC 和应用程序服务器分离进程(这可能是出于稳定性考虑,但并非绝对必要),您还可以使用 ACE 作为 DTC 服务器的基础。

如果您想制作高性能的中间层服务器,请查看 Douglas Schmidt 的ACE 框架。它带有一个称为 TAO 的 ORB,并且足够灵活,可以让您或多或少地使用您喜欢的任何线程模型。使用它是在学习它和自己编写和调试所有同步和并发问题之间的权衡。

于 2009-01-27T15:09:38.490 回答
0

您的任务可能很晚,但它对其他用户可能有用:LIXA不是“框架”,但它提供了 TX 事务划分规范的实现并支持大多数 XA 功能。TX 规范适用于 C 和 COBOL 语言,但 C 版本在 C++ 项目中的集成应该毫不费力。

于 2017-01-15T20:33:10.013 回答
0

其他选择是开源Enduro/X 分布式事务处理框架,它允许编写简单的 C/C++ 服务,这些服务可以与资源管理器(例如数据库)一起操作,并提供提交或中止由相同/不同物理服务器上的多个不同可执行文件完成的工作的能力使用不同的资源/数据库。

内部使用 XA 2PC。

于 2019-06-28T10:27:06.123 回答