XA和分布式事务处理

1、分布式事务处理(DTP)模型
应用程序(AP)
事务管理器(TM):交易中间件
资源管理器(RM):通常是数据库
通信资源管理器(CRM):消息中间件
2、事务处理
本地事务:一个数据库内部的事务处理,如对多个表的操作
全局事务:DTP环境中的多个数据库的事务处理
3、交易中间件(TM)
通常多个数据库之间无法知道彼此在做什么,只将自己所做的操作影射到全局事务中,由TM通知和协调相关数据库的提交或回滚。
4、XA
交易中间件(TM)与数据库之间的接口规范,TM用它来通知数据库事务的开始、结束以及提交、回滚等。XA 接口函数由数据库厂商提供。
5、两阶段提交协议(XA规范的基础)
1)第一阶段
TM请求所有相关数据库准备提交(预提交)各自的事务分支;
数据库收到预提交请求后:
如果可以提交事务分支,则将事务分支中所做的操作固定记录(无法在该事务分支中加入任何操作),对访问的资源上锁,并给TM一个同意提交的应答;
如果无法提交事务分支,回滚事务分支中所做的操作,释放上锁的资源,并返回给TM一个失败应答。
2)第二阶段
TM审查所有数据库返回的预提交结果:
如所有数据库都可以提交,TM将要求所有数据库做正式提交,这样该全局事务被提交。
如果任一数据库预提交返回失败,TM将要求所有其它数据库回滚操作,这样该全局事务被回滚。
6、全局事务处理过程
1)AP通知TM开始一个全局事务;
2)TM通过XA接口函数通知数据库开始事务;
3)AP对数据库管理的资源进行操作,数据库系统记录事务对本地资源的所有操作;
4)TM负责记录AP操作过哪些数据库(事务分支);
5)AP操作完成后TM通过XA接口函数通知数据库操作完成。
6)AP通知TM提交该全局事务;
7)TM通过XA接口函数要求各个数据库做预提交
8)所有数据库返回成功后,TM要求各个数据库做正式提交。
7、XA的优点和注意点
优点:事务的完整性由TM和数据库通过XA接口控制,AP只需要关注与数据库的应用逻辑处理;只需通知TM提交或回滚事务,就可以控制整个全局事务。
注意点:两阶段提交,对数据库来说事务从开始到结束(提交或回滚)的时间相对较长,在事务处理期间数据库使用的资源,直到事务结束时才会释放。

相关推荐