混合最终一致性系统和遗留 ACID 系统
Posted
技术标签:
【中文标题】混合最终一致性系统和遗留 ACID 系统【英文标题】:Mixing eventual consistency systems and legacy ACID systems 【发布时间】:2013-02-03 20:30:58 【问题描述】:是否存在将最终一致性系统与传统 ACID 系统混合的模式?
我想将数据存储在大型机上一些(至少两个)需要类似 ACID 事务的遗留系统中。这些大型机数据库(我们称它们为 OldWorld)在同一进程中的同一事务管理器下运行,因此大型机系统的一致性没有问题。
我有一个事务管理器,它可以在非大型机环境(让我们称之为 NewWorld)中使用大型机 tm 和支持 ACID 的关系数据库处理 XA 事务。 但我不想使用 XA-Transaction,因为它经常会导致大型机端长时间运行的锁出现问题,而且在许多情况下,我不需要两个世界的所有 ACID 功能。我一直想要一个一致的大型机(旧世界中的所有数据在旧世界中都是一致的)。新世界系统在从主机端读取数据时可以处理不一致的数据(新旧不一致)。用于在 OldWorld 中存储数据的操作很简单,并且节省了在功能上不会失败的“仅添加操作”(技术上可能会失败,但这应该始终是暂时的失败)。
【问题讨论】:
【参考方案1】:我解决分布式事务需求的想法是我异步更新旧世界中的数据并使用事件源数据层(在新世界中)来存储在旧世界中需要完成的信息,使用“soft-transaction-id's”来防止重复提交到旧世界。这些“软事务ID”将在将数据存储到事件源数据层以用于需要在旧世界中完成的事务时生成。
我没有将“软事务 ID”添加到旧世界数据库的更改,但我可以添加一个新数据库,该数据库可以在“软事务 ID”旁边存储“完成”状态并使该数据库的更新成为旧世界事务的一部分。然后另一个异步进程可以在没有任何锁定的情况下读取状态信息并更新 NewWorld(例如,使用来自事件源存储的数据更新关系模型。并将软事务 ID 标记为完成(“全局一致”) ) OldWorld 的更新总是会检查 soft-transaction-id 是否总是先提交。
当我阅读我的文章时,我觉得这就像全局事务,只是锁定较少。知道我对旧世界的更新将成功运行是必不可少的,否则您需要手动合并过程,它可以处理功能冲突。 NewWorld 系统需要处理不一致的全局状态的功能。它可以通过读取关系数据库来完成,并通过分析尚未提交的(进入旧世界数据库)事件存储来模仿旧系统数据请求。对于所有其他事务,我需要使用具有锁定行为的分布式事务。
【讨论】:
以上是关于混合最终一致性系统和遗留 ACID 系统的主要内容,如果未能解决你的问题,请参考以下文章