NOTE
2.9 两阶段实现之2PC
1. 2PC是什么 - 2PC:Two-Phase Commit - 把事务分成两个阶段 - 第一阶段由事务管理器像所有database发送prepare请求 - 如果全部响应ok那么执行第二阶段的commit;如果有一个响应fail那么执行第二阶段的rollback - 2. 2PC存在的问题 -
这是历史学习笔记,可能存在过时或不完整的理解。
1. 2PC是什么
- 2PC:Two-Phase Commit
- 把事务分成两个阶段
- 第一阶段由事务管理器像所有database发送prepare请求
- 如果全部响应ok那么执行第二阶段的commit;如果有一个响应fail那么执行第二阶段的rollback

2. 2PC存在的问题
- 单点问题:事务管理器或者任意一个资源管理器挂了,那么整个事务无法执行
- 同步阻塞:各个database第一阶段开始锁定资源,直接第二阶段释放锁资源,一直处于阻塞状态
3. 2PC的实现
3.1. XA
- DTP模型定义了- 定义了几个角色:
- AP:我们的微服务
- TM:全局事务管理者
- RM:数据库
- CRM:TM和RM的通信中间件
- 一个分布式事务可以被拆分成许多个本地事务,运行在不同的AP和RM上
- 每个本地事务的ACID很好实现,但是全局事务必须保证其中包含的每一个本地事务都能同时成功,若有一个本地事务失败,则所有其它事务都必须回滚。但问题是,本地事务处理过程中,并不知道其它事务的运行状态。因此,就需要通过CRM来通知各个本地事务,同步事务执行的状态
- 因此,各个本地事务的通信必须有统一的标准,否则不同数据库间就无法通信。XA就是TM和RM通讯的接口规范