许多使用多个事务性数据源的项目可能需要跨这些数据源的某种分布式事务,以获得一致的数据视图。事务性数据源提供了哪些最常见的原语来将它们添加到异构事务系统中?
如果你需要一个具体的例子,假设我有一个事务文件系统,我可以为它制作快照,还有一个事务数据库,它有一个带有检查点的预写日志,它们运行在不同的机器上。我如何通过以协调的方式进行快照/检查点设置来确保对它们的视图一致?将在数据源外实现的某种形式的两阶段提交合并在一起是实现这一点的正常方法,还是数据源本身通常提供一些API来使两阶段提交更易于正确实现?
发布于 2013-06-19 03:35:03
因此,我所问的术语显然是"eXtended架构“的XA,在这种架构中,一个事务可能跨越多个数据源。
根据Wikipedia的文章,许多数据存储实现的XA标准使用两阶段提交。我认为这主要是由数据库实现的,并且似乎在Oracle/SQLServer/DB2/PostgreSQL中,也可能在其他数据库中。文件系统似乎不会将此原语公开给用户级应用程序,尽管它们中的一些可能会。
您也可以使用不同的共识协议(3阶段提交/Paxos是最常见的),但在实践中,很少有系统提供这种访问,所以2阶段提交是最好的选择。
https://stackoverflow.com/questions/17038102
复制相似问题