Skip to the content.

..

分布式事务

基础理论

事务

ACID 特性:原子性、一致性、隔离性、持久性

分布式事务

一致性

CAP 原则

一致性(C)

在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

可用性(A)

在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)

分区容错性(P)

以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在 C 和 A 之间做出选择。

BASE 理论(柔性事务)

BA

Basically Available 基本可用,分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

S

Soft State 软状态,允许系统存在中间状态,而该中间状态不会影响系统整体可用性

E

Consistency 最终一致性,系统中的所有数据副本经过一定时间后,最终能够达到一致的状态

幂等操作

不用担心重复执行会对系统造成改变

解决方案

分布式事务使用场景

两阶段提交(XA)

xa1

xa2

大致的流程: 第一阶段(prepare):事务管理器向所有本地资源管理器发起请求,询问是否是 ready 状态,所有参与者都将本事务能否成功的信息反馈发给协调者; 第二阶段 (commit/rollback):事务管理器根据所有本地资源管理器的反馈,通知所有本地资源管理器,步调一致地在所有分支上提交或者回滚。

存在的问题?

TCC(Try-Confirm-Cancel)

TCC 事务机制相比XA优点

存在问题?代码实现复杂度相对较高

异常总结?

Saga

核心思想:将长事务拆分为多个本地短事务,由Saga事务协调器协调,如果正常结束那就正常完成,如果某个步骤失败,则根据相反顺序一次调用补偿操作。

Saga的执行顺序有两种:

本地消息表

local-message

操作步骤

实现的条件

容错机制

可靠消息最终一致性

ba-message

操作步骤

与本地消息对比

尽最大努力通知

适用于一些最终一致性时间敏感度低的业务

流程

实战

两阶段提交/XA

seata

TCC

实现太复杂