分布式事务场景
什么是事务
用户定义的一系列数据库操作,
这些操作可以视为一个完整的逻辑处理工作单元,
要么全部执行,要么全部不执行,
是不可分割的工作单元。
ACID原则
A 原子性 通过锁保证
C 一致性 通过日志保证
I 隔离性 通过锁保证
D 持久性 通过日志保证
BEGIN TRANSACTION业务逻辑
COMMIT/ROLLBACK
BEGIN TRANSACTION表示事务的开启标记
COMMIT 表示事务的提交操作,表示该事务的结束,此时将事务中处理的数据刷到磁盘中物理数据库磁盘中去。
ROLLBACK 表示事务的回滚操作,表示事务异常结束,此时将事务中已经执行的操作撤销回原来的状态。
分布式事务概念
分布式事务是指会涉及到操作 多个数据库(服务) 的事务。
其实就是将对同一数据库(服务)事务的概念扩大到了对多个数据库(服务)的事务。
目的是为了保证分布式系统中的数据一致性。
分布式事务思路分析
分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,
提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)
XA规范
AP 应用程序
TM 事务管理器
RM 资源管理器(DB)
XA规范:总之一句话:
就X/Open DTP 定义的 事务协调者与数据库之间的接口规范(即接口函数),事务协调者用它来通知数据库事务的开始、结束以及提交、回滚等。
XA 接口函数由数据库厂商提供
XA规范的实现:
分布式集群的情况下,一般加代理层来充当TM的角色,实现对事务的支持。
二阶提交协议(2PC)和三阶提交协议(3PC)就是根据这一思想衍生出来的。
两阶段提交主要保证了分布式事务的原子性:即所有结点要么全做要么全不做(3PC在开发中没人会去使用)
2PC
1阶段:准备(投票)阶段
2阶段:执行事务
2PC的缺点
单点故障 协调者出错事务会失败 解决方案:搭建集群解决,防止单节点挂了
阻塞资源 占用数据库连接性能低
二阶段出错 数据不一致
3pc提交协议
can commit
pre commit
do commit
can commit
can commit中止提交abort commit
1.有参与者返回no
2.协调者等待超时
3.参与者没有收到协调者的指令
can commit 所有参与者返回yes,继续执行pre commit
pre commit阶段都是yes,执行do commit
若有这些情况则abort commit
1.有参与者返回no
2.协调者等待超时
超时机制:参与者
pre commit :
回滚
do commit:
提交
TCC (Try Confirm Cancel)
事件表解决方案
消息队列+本地事件表+定时任务
最大努力通知方案
特点:
1、重复通知机制。
2、消息校对机制。
适用于做让第三方接入的开放平台