许多使用多个事务数据源的项目可能需要跨这些数据源的某种分布式事务来获得一致的数据视图。事务数据源提供哪些最常见的原语以允许将它们添加到异构事务系统中?
如果您需要一个特定的示例,假设我有一个可以制作快照的事务文件系统,以及一个具有带检查点的预写日志的事务数据库,它们在不同的机器上运行。如何以协调的方式通过快照/检查点确保我对它们两者的看法一致?将在数据源之外实现的某种形式的两阶段提交组合在一起是执行此操作的正常方式,还是数据源本身通常提供一些 API 以使两阶段提交更容易正确实现?
许多使用多个事务数据源的项目可能需要跨这些数据源的某种分布式事务来获得一致的数据视图。事务数据源提供哪些最常见的原语以允许将它们添加到异构事务系统中?
如果您需要一个特定的示例,假设我有一个可以制作快照的事务文件系统,以及一个具有带检查点的预写日志的事务数据库,它们在不同的机器上运行。如何以协调的方式通过快照/检查点确保我对它们两者的看法一致?将在数据源之外实现的某种形式的两阶段提交组合在一起是执行此操作的正常方式,还是数据源本身通常提供一些 API 以使两阶段提交更容易正确实现?
因此,我所问的术语显然是“扩展架构”的XA,其中事务可能跨越多个数据源。
根据 Wikipedia 文章,许多数据存储实现的 XA 标准使用 2 阶段提交。我认为这主要仅由数据库实现,并且似乎在 Oracle/SQLServer/DB2/PostgreSQL 中,可能还有其他。文件系统似乎没有将这个原语暴露给用户级应用程序,尽管其中一些可能会这样做。
你也可以使用不同的共识协议(三阶段提交/Paxos 是最常见的),但实际上很少有系统可以访问,所以两阶段提交是你最好的选择。