分布式事务

1、事务

事务是作为单个逻辑单元执行的一组操作,要么全部成功,要么全部失败。

事务包含四个特性:原子性,一致性,隔离性,持久性。

2、分布式事务

单数据源的一致性依靠单机事务来保证,多数据源的一致性就要依靠分布式事务。

分布式事务用于分布式系统中保证不同节点之间的数据一致性。

3、分布式事务的实现

3.1 XA分布式事务协议。

XA协议包含两阶段提交(2PC)和三阶段提交(3PC)两种实现。

在XA协议中包含着两个角色:事务协调者和事务参与者。

1)XA两阶段提交(2PC)---强一致性

一个是准备阶段,一个是提交阶段,两个阶段都由事务管理器发起。基于两阶段提交协议,事务管理器能够最大限度地保证跨数据库操作的事务的原子性,是分布式系统环境下最严格的事务实现方法。

注意:1)只要有一个返回NO,全部回滚。

           2)两阶段提交协议也依赖与日志,只要存储介质不出问题,两阶段协议就能最终达到一致的状态(成功或者回滚)

不足:

1.性能问题(在事务执行过程中,各个节点都在占用着数据库资源)

2.协调者单点故障问题(事务协调者是整个XA模型的核心,一旦事务协调者节点挂掉,参与者收不到提交或是回滚通知,参与者会一直处于中间状态无法完成事务。)

3.丢失消息导致的不一致问题。(在XA协议的第二个阶段,如果发生局部网络问题,一部分事务参与者收到了提交消息,另一部分事务参与者没收到提交消息,那么就导致了节点之间数据的不一致。)

2) XA三阶段提交

XA三阶段提交在两阶段提交的基础上增加了CanCommit阶段,并且引入了超时机制。一旦事物参与者迟迟没有接到协调者的commit请求,会自动进行本地commit。

3PC只是解决了在异常情况下2PC的阻塞问题,但导致一次提交要传递6条消息,延时很大。

3.3 MQ事务

这类事务机制将分布式事务分成多个本地事务,这里称之为主事务与从事务。异步事务机制、只能保证最终一致性;但可用性非常高,不会因为故障而发生阻塞

利用消息中间件来异步完成事务的后一半更新,实现系统的最终一致性。这个方式避免了像XA协议那样的性能问题。

3.3 TCC事务--补偿事务---最终一致性

TCC事务是Try、Confirm、Cancel三种指令的缩写,TCC在保证强一致性的同时,最大限度提高系统的可伸缩性与可用性

一次完整的交易由一系列微交易的Try 操作组成,如果所有的Try 操作都成功,最终由微交易框架来统一Confirm,否则统一Cancel

原文地址:https://www.cnblogs.com/mcahkf/p/9014138.html