事务:由不同的小活动组成,要么全部成功,要么全部失败
本地事务
- Atomic: 整体执行
- Consistency: 结果一致
- Isolation: 事务之间不干扰
- Durability: 持久性
分布式事务
分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务
本质跨进程的事务
- 多服务,多数据库
- 单服务,多数据库
- 多服务,单数据库
CAP定理
指出对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性:写操作后,读操作可以读取到最新的数据状态
- 写入主数据库后要将数据同步到从数据库
- 写入主数据库后,在向从数据库同步期间,要将从数据库锁定,同步完成后释放锁
- 可用性:保证每个请求不管成功或者失败都有响应
- 从数据库接受到数据查询的请求则能够立刻响应数据查询结果
- 从数据库不允许出现响应超时或响应错误
- 分隔容忍:系统中任意信息的丢失或失败不会影响系统的继续运作
- 主数据库向从数据库同步数据失败不影响读写操作
- 其一个节点挂掉不影响另一个节点对外提供服务
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。因此,根据CAP原理将数据库分成了三大类
- 满足CA原则:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大
- 满足CP原则:满足一致性,分区容忍性的系统,通常性能不是特别高
- 满足AP原则:满足可用性,分区容忍性的系统,通常可能对一致性要求低一些
具备P的前提下,C和A不能共存。P是分布式系统的基本要求
- AP:放弃一致性,追求分区容忍性和可用性,这是常见的选择
- CP:放弃可用性,追求一致性和分区容错性,比如:跨行转账
- CA:放弃分区容忍性,不进行分区。不是分布式了
BASE规则
BASE是数据库通常对可用性及一致性的弱要求原则:
- Basically Availble:基本可用,保证核心服务可用
- Soft-state:软状态/柔性事务。无连接的
- Eventual Consistency:最终一致性,也是ACID的最终目的
2PC
2PC是两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段,提交阶段,2是指两个阶段
- P是指准备阶段
- C是指提交阶段
整个事务过程由事务管理器和参与者组成
- 事务管理器:负责决策整个分布式事务的提交和回滚
- 参与者:负责自己本地事务的提交和回滚
阶段
- 准备阶段:事务管理器给每个参与者发送prepare信息,每个数据库参与者在本地执行事务,并写本地的undo/redo日志,此时事务没有提交
- undo是修改前数据,用于回滚
- redo是写入后数据,用于写入
- 提交阶段:
- 如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚消息
- 如果成功,发送提交消息,参与者根据事务管理器的指令执行提交或者回滚操作,并释放事务处理过程中使用的锁资源(必须最后释放锁)
事务提交场景:
事务回滚场景:
情况 | 解决 |
---|---|
事务管理器挂了 | 选择新的事务管理器 |
参与者挂了 | 挂了后不恢复,不会不一致 |
参与者挂了,但恢复了 | 参与者需要直接取消未执行事务,然后询问事务管理器接下来操作 |
事务管理器和参与者在第一阶段挂了 | 选择新的事务管理器来询问参与者情况,进行接下来操作 |
事务管理器和参与者在第二阶段挂了,但未提交 | 选择新的事务管理器来询问参与者情况,若第一阶段有失败则rollback,成功则commit |
事务管理器和参与者在第二阶段挂了,但提交了 | 选择新的事务管理器,假定挂掉的执行的commit,若恢复后为rollback,则和事务管理器通信,协商数据一致 |
- 优点:原理简洁清晰、实现方便;
- 缺点:同步阻塞、单点问题、某些情况可能导致数据不一致。
X/Open DTP
X/Open DTP 定义了三个组件: AP,TM,RM
- AP(Application Program):也就是应用程序,可以理解为使用DTP的程序
- RM(Resource Manager):资源管理器,这里可以理解为一个DBMS系统,或者消息服务器管理系统,应用程序通过资源管理器对资源进行控制。资源必须实现XA定义的接口
- TM(Transaction Manager):事务管理器,负责协调和管理事务,提供给AP应用程序编程接口以及管理资源管理器
DTP模型定义TM和RM之间通讯的接口规范叫XA,简单理解为数据库提供的2PC接口协议,基于数据库的XA协议来实现2PC又称为XA方案
- TM向AP提供应用程序编程接口,AP通过TM提交及回滚事务
- TM交易中间件通过AX接口来通知RM数据库事务的开始,结束以及提交,回滚等
Seata方案
AT模式
3PC
三阶段提交:将2PC的执行事务过程一分为二,形成canCommit、preCommit、doCommit三个阶段的事务处理协议。
- 优点:解决单点问题、添加preCommit过程,避免2PC提交协议的无限期等待问题
- 缺点:一旦出现网络分区协调者与参与者无法通信,参与者在超时之后,依然会提交事务,造成数据不一致