企业应用程序中的最终一致性

时间:2017-11-16 13:23:23

标签: distributed-transactions eventual-consistency

通过微服务文档和会谈,我发现使用XA协议上的分布式事务不是确保数据一致性的好选择,因为它会降低系统速度,并非所有端点都支持它,例如REST。

建议使用重试机制或消息传递实现最终一致性技术。

我的问题是,是否可以在企业应用程序中使用最终一致性,其中每个时间点的数据一致性至关重要?如何消除最终一致性中的脏读?或者换句话说,是否有可能确保没有第三方流程获得陈旧数据,这些数据是未提交的一部分"交易"?

1 个答案:

答案 0 :(得分:0)

嗯,这是最终一致性的要点:你无法保证没有进程“正在获取陈旧数据”。您的系统将在有限的时间内收敛到更新状态。但你不知道什么时候。

使用轻量级补偿模式,您可以查看事务中的每个操作T(i)并定义补偿操作C(i)。然后你可以保证

T(1),...,T(N)或

T(1),...,T(N),C(N),...,C(1)

成功执行(在有限的时间内......)。这意味着:通过执行相应的补偿,可以成功执行所有操作或撤消所有操作。

由于这些操作需要服务之间的协调,并且不在真实的事务性,隔离的上下文中运行,因此当然可以接收由未完全完成或补偿的事务导致的陈旧数据。