一、介绍
1、单机事务特点
事务(一般指数据库的事务)是运行在数据库上的逻辑工作单元,具有 ACID 特点:
A:Atomic (原则性) 事务必须是原子的工作单元
C:Consistent (一致性) 事务完成时,所以的数据都保持一致的状态(比如:银行账户操作后,总额不变)
I:Isolation(隔离性) 并发事务所做的修改之前应该的隔离的
D:Duration(持久性) 事务完成后,对系统的影响是持久性的
2、事务操作过程
1)、记录redo和undo日志文件,确保日志在磁盘上的持久化
2)、更新数据记录
3)、提交事务,将redo写入comment记录,并删除undo日志。(执行失败回滚,则按照undo的log文件执行,并所有log文件)
3、分布式事务:由于业务变更,需要在不同的数据库上也能够保证事务的4大特点。分布式事务的产生一般有两种情况:
1)、由于数据量需要进行分库分表实现
2)、由于业务数据量的产生,需要将一个应用中的模块进行拆分(比如电商经常会按照:用户模块,库存模块,订单模块、商品模块等进行服务化改造)。
二、X/OpenDTP事务模型
1、 X/Open Distributed Transaction Processing Reference Model 是由A/Open组织机构提出的一套分布式事务标准,定义了规范的Api接口。 提出了实现模型或协议:
2PC(two-phase-commit)两阶段提交,用来保证分布式事务的完整性,J2ee遵循了该规范并在在Java中实现了分布式事务的编程接口规范--JTA。
XA是X/Open DTP 定义的中间件和数据库之间的接口规范,XA接口函数由各个数据库厂商进行提供。
2、模型角色
1)、AP application 应用本身
2)、RM resources manager 资源管理器(一般指数据库)
3)、TM transaction manager 事务管理器(事务协调)
3、二阶段提交
由于分布式情况下存在CAP理论的情况,所以提出二阶段事务提交。
1)、阶段一、提交事务情况
1、TM向所有的AP发送事务内容,询问是否可以执行事务的提交操作,并等待各个AP的响应
2、执行事务 各个AP节点执行事务操作,将redo和undo信息记录到事务日志中,尽量把提交过程中的耗时的操作和准备都提前完成
确保后续事务提交的成功率
3、各个AP向TM反馈事务询问的响应 各个AP将执行成功与否结果返回给TM进行汇集和决策。
2)、阶段二、执行操作
说明:1、若在阶段一中有参与者返回no的结果,则需要将所有的操作进行回滚,则在阶段二中发送给大家abort的中断请求。
2、若在阶段一准备了大量的工作,没有发生异常,在阶段二的时候(协调者或者某参与者挂掉,新选举的协调者不知道挂掉的参与者执行的状态)
发生状况,虽然发生的概率比准备阶段低很多,但是也存在可能性。
二阶段提交的缺点:
1、在第二阶段存在数据一致性的问题
2、同步阻塞(协调者发出指令后需要等待所以的节点返回状态,该阶段是阻塞状态)
4、3PC(three-phase-commit),数据一致性的问题并没有解决,只是增加成功率
1)、阶段一:canCommit
2)、阶段二:preCommit
3)、阶段三:doCommit
三、分布式事务实现
1、JOTM(Java open transaction manager)
2、Atomikos 一般使用第二种方式,下一篇将使用它编写demo实现。