混合最终一致性系统和传统ACID系统

时间:2013-02-19 08:13:53

标签: locking distributed-transactions lock-free acid eventual-consistency

是否存在将最终一致性系统与传统ACID系统混合的模式?

我想将数据存储在需要类似ACID的事务的大型机上的一些(至少两个)遗留系统中。那些大型机数据库(我们称之为OldWorld)在同一个进程中运行在同一个事务管理器下,因此大型机系统的一致性没有问题。

我有一个事务管理器,可以在非大型机环境中使用mainframe-tm和ACID-able关系数据库处理XA-Transactions(让我们称之为NewWorld)。 但是我不想使用XA-Transaction,因为它经常会导致主机端长时间运行的锁定出现问题,而且在很多情况下我不需要两个世界的所有ACID功能。我总是想要一个一致的大型机(OldWorld中的所有数据在OldWorld中都是一致的)。 NewWorld系统在从大型机端读取数据时可以处理不一致的数据(新旧之间的不一致)。用于在OldWorld中存储数据的操作很简单,并且保存“无添加操作”,这些操作不会在功能上失败(技术上可能会失败,但这应该是暂时的失败)。

1 个答案:

答案 0 :(得分:0)

我想要解决分布式事务的需求是我异步更新OldWorld中的数据并使用事件源数据层(在NewWorlds中)来存储在OldWorld中需要完成的信息,使用“soft-transaction-id”来防止双重提交给OldWorld。这些“soft-transaction-id”将在将数据存储到事件源数据层时生成,以用于需要在OldWorld中完成的事务。

我没有将“soft-transaction-id”添加到OldWorld-Databases的更改,但我可以添加一个新的数据库,可以在“soft-transaction-id”旁边存储“Done”-State并将此数据库的更新作为旧世界事务的一部分。然后另一个异步进程可以在没有任何锁定的情况下读取状态信息并更新NewWorld(例如,使用来自事件采购商店的数据更新关系模型。并将soft-transaction-id标记为已完成(“global-consistent”) )OldWorld的更新将始终检查是否始终首先提交soft-transaction-id。

当我阅读我的着作时,我感觉它就像全局交易,只是锁定较少。我对OldWorld的更新将成功运行的知识是必不可少的,如果不需要手动合并过程,它可以处理功能冲突。 NewWorld系统需要处理不一致的全局状态的功能。它可以通过读取关系数据库并通过分析尚未提交(进入OldWorld-Database)事件存储来模仿OldSystem DataRequests来完成。对于所有其他事务,我需要使用具有锁定行为的分布式事务。