如何解决分布式事务问题?(一)

如何解决分布式事务问题?

首先要了解什么是分布式事务。

分布式事务是指事务涉及的参与者和支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点上,目的是保证不同数据的一致性。例如,大型电商系统中的下单场景,需要涉及扣库存、优惠折扣计算、订单生成等服务,这些服务通常位于不同的服务器和数据库中。在这种情况下,分布式事务的目的是保证这些操作要么全部成功,要么全部失败。

如何解决分布式事务问题?(一)

因此,本质上来说,分布式事务是为了保证不同数据库数据的一致性。

如何解决分布式事务问题?(一)

分布式事务解决方案:基于CAP定理和Bas理论,我们可以知道,对于上述情况产生的分布式问题,要么采用强一致性方案,要么采用弱一致性方案。强一致性方案是指通过第三方事务管理器来协调多个节点的事务性,保证每一个节点的事务达到同时成功或者同时失败。

如何解决分布式事务问题?(一)

如何解决分布式事务问题?(一)

为了实现这样一个需求,我们可以引入X/OpenDTP模型提供的XA协议,基于2阶段提交或者3阶段提交的方式去实现。但是,如果全局事务管理器中的多个节点有任意一个节点在进行事务提交确认的时候,由于网络通信延迟导致了阳痿,就会影响到所有节点的事务提交,阻塞过程也会影响到用户的请求线,这对于用户体验以及整体的性能影响非常大。

弱一致性方案是针对强一致性方案所产生的性能和数据一致性平衡的方案。简单来说,就是牺牲一定的强一致性,数据在某一个时刻会存在不一致的状态,但最终这些数据会达成一致,这样的好处是提升了系统的性能。

在弱一致性方案中,常见的解决方案有三种:

·第1个:使用分布式消息队列来实现最终的一致性。

·第二个基于TC事务,通过演进版本的二阶段提交去实现最终一致性。

·第三个使用Seta事务框架,它提供了多种事务模型,比如AT、XA、Sag、TCC等,不同的模型提供的是强一致性或者弱一致性的支持。