分布式事务
分布式事务
2PC 两阶段提交
2PC应用之XA
XA是X/Open组织提出的,定义了事务管理器与资源管理器之间通信的接口协议;XA协议由数据库实现,目前支持XA协议的数据库有Oracle、MySql、BD2等;
一个数据库实现XA协议之后,它就可以作为作为一个资源管理器参与到分布式事务中;
2PC应用之TCC
柔性事务
单数据库事务完全遵循ACID规范,属于刚性事务,分布式事务要完全遵循ACID规范比较困难, 分布式事务属于柔性事务,满足BASE理论;
BASE描述: BA(Basic Availability 基本业务可用性)、S(Soft state 柔性状态)、E(Eventual consistency 最终一致性);
柔性事务对ACID的支持:
1、原子性:
严格遵循;
2、一致性:
事务完成后的一致性严格遵循,事务中的一致性可适当放宽;
3、隔离性:
并行事务间不可影响;事务中间结果可见性允许安全放宽;
4、持久性:
严格遵循;
为了可用性、性能的需要,柔性事务降低了一致性(C)与隔离性(I) 的要求,即“基本可用,最终一致”;
柔性事务的分类
柔性事务分为:两阶段型、补偿型、异步确保型、最大努力通知型;
1、两阶段型
就是分布式事务两阶段提交,对应技术上的XA、JTA/JTS,这是分布式环境下事务处理的典型模式。
2、补偿型
TCC型事务(Try/Confirm/Cancel)可以归为补偿型;TCC思路是:尽早释放锁;在Try成功的情况下,如果事务要回滚,Cancel将作为一个补偿机制,回滚Try操作;
TCC各操作事务本地化,且尽早提交 (放弃两阶段约束);当全局事务要求回滚时,通过另一个本地事务实现“补偿”行为;
TCC是将资源层的两阶段提交协议转换到业务层,成为业务模型中的一部分;
3、异步确保型
将一些同步阻塞的事务操作变为异步的操作,避免对数据库事务的争用;比如消息事务机制;
4、最大努力通知型
通过通知服务器(消息通知)进行,允许失败,有补充机制;