分布式事务的原理


问题描述

        分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。

        比如大型的电商系统中的下单场景,会涉及到扣库存、优惠促销计算、订单 ID 生成。 通常情况下,库存、促销、主键生成策略都位于不同的服务器和数据库表中。 下单接口的成功与否,不仅取决于本地节点的数据库操作,而且还依赖第三方系统的结果,这时候分布式事务就保证这些操作要么全部成功,要么全部失败。

        因此,本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 基于 CAP 定理可以知道,对于上述情况产生的分布式事务问题,我们要么采用强一致性方案、要么采用弱一致性方案。

        1、强一致性,就是指通过第三方的事务管理器来协调多个节点的事务,保证每个节点的事务达到同时成功和同时失败,为了实现这样一个需求,我们会引入 Xopen/DTP 模型提供的 XA 协议,基于 2pc 或者 3pc 的方式来实现。但是,在如果全局事务管理器中的多个节点中,如果任意一个节点再进行事务提交确认时,由于网络通信延迟导致阻塞,就会影响到所有节点事务的提交,而这个阻塞过程也会影响阻塞用户的请求线程,这对于用户体验以及整体性能的影响较大。

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

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

                1. 使用分布式消息队列,来实现最终一致性

                2. 基于 TCC 事务,通过演进版本的二阶段提交实现最终一致性

                3. 使用 Seata 事务框架,它提供了多种事务模式,如 AT、XA、Saga、TCC 等

你可能感兴趣的:(分布式事务,java)