content
- 回忆:什么是事务
- 分布式事务简介
- 分布式事务提交协议
- 分布式事务控制模型
- 两阶段提交协议(2PC)分类
回忆:什么是事务
▍事务的定义
-
事务是由若干个为了完成某一个任务而逻辑相关的操作组成的操作序列,是保证数据库正确性的基本逻辑单元。
-
通俗地说,任何一个完整的所谓“任务”,归根结底都是一系列对数据库进行存取的操作序列;这些操作序列,要么全部成功,要么全部失败。
▍事务的模型
开始标识(start) → 操作 → 结束标识(commit/abort)
▍事务的性质
- 原子性(Atomicity)事务是一个原子操作,要么全部成功,要么全部失败
- 一致性(Consistency)事务在完成时,所有数据都必须保持一致状态
- 隔离性(Isolation)并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响
- 持久性(Durability)一旦事务完成,数据库的改变必须是持久化的
分布式事务简介
▍定义
- 分布式事务归根结底也是若干对数据进行存取的操作序列,称为 全局事务
- 这些操作被分到多个独立的场地上
- 每个独立场地上的若干操作集合,称为 子事务
▍补充
- 通信原语——负责在进程间进行数据传送
- 控制报文——负责协调各子事务间的操作
▍模型
- 进程模型: 全局启动协调者进程,即根代理,来进行全局的控制和协调;局部启动代理者进程,即子代理,来执行在该场地的具体操作
- 服务器模型: 一个执行场地一个服务器进程,位于该场地的子事务(一个场地可能有多个不同全局事务的子事务)都共用这一个服务器进程
分布式事务提交协议
▍两阶段提交协议
全局事务分解为各个场地上的子事务,所有子事务必须全部提交(commit)或全部废弃(abort)——这通过 两阶段提交协议 实现,也即 2PC(2-Phase-Commit)
▍协调者与参与者
- 协调者是协调者进程的执行方,即根代理,决定所有子事务的提交/废弃
- 参与者是代理者进程的执行方,即子代理,决定本地子事务的提交/废弃
- 二者都有本地日志,在进行操作前都必须将该操作记录到相应的日志文件中,以进行事务故障恢复和系统故障恢复
▍两个阶段
- 决定阶段:协调者发送 prepare(预提交) 命令,然后等待所有参与者的应答;如果所有参与者都返回 (准备提交) ,则协调者作出提交决定;只要有一个参与者返回 (准备废弃) ,则协调者作出废弃决定
- 执行阶段:协调者向所有参与者发送决定阶段做出的决定;如果是 commit(提交) 命令,则所有所有参与者进行提交;如果是 abort(废弃) 命令,则所有所有参与者进行废弃;无论是 commit/abort,所有参与者都要返回 ack(确认)
▍图解
分布式事务控制模型
▍DTM & LTM
- DTM分布式事务管理器——物理上多个,逻辑上一个
- LTM局部事务管理器——显然是每个场地一个
▍三种控制模型
▶ 主从模型——DTM与LTM一问一答;LTM之间无直接通信,需要由DTM转发
▶ 三角模型——LTM之间可以直接通信,而不需DTM中介
▶ 层次模型——每个LTM具有双重角色,即可以再向下再分
两阶段提交协议(2PC)分类
▍分类
集中式2PC | 经典模型;需要唯一的 总控节点 来集中处理报文 |
分布式2PC | 场地之间 两两通信;因此每个场地即可独立作出决定 |
分层式2PC | 与集中式2PC类似,可以理解为有多个小的 总控节点 |
线性2PC | 通过一个 链条 线性的传递报文 |
▍图解
M o r e More More