X/OpenDTP 角色

AP application :应用程序节点
RM resources manager:事务管理器,数据库
TM transaction manager:事务管理器,事务协调者

2pc

阶段一:提交事务请求(投票)

1.TM 向所有AP节点发送事务内容,询问是否可以执行事务提交操作,并等待各个AP的响应。
2.执行事务
各个AP节点执行事务操作,将undo和redo信息记录到事务日志中,尽量把事务过程中所消耗时间的操作和准备都提前后确保后续事务提交的成功率。
3.各个AP向TM反馈事务询问的响应
各个AP成功执行了事务操作,那么反馈给TM yes 的 response;
如果AP没有成功执行事务, 就反馈TM no 的 respnse;

阶段二:执行事务提交(事务正真提交 或 回滚)

1.执行提交事务
TM事务提交者向AP节点发送commit
2.中断事务提交
如果AP节点返回了no,那么TM会向AP节点发送abort中断请求,AP节点会根据undo日志回滚事务

2pc存在的问题

1.数据一致性问题
2.同步阻塞

3pc

阶段一:canCommit (多了个询问阶段,提高可靠性)
阶段二:preCommit
阶段三:doCommit

分布式事务实现

JOMT(java open transaction manager)

Atomitos(开源)