记-X/OpenDTP--分布式事物模型
分布式事物产生背景
[database transaction]
数据库事物要满足几个要求:ACID
Atomic(原子性) 事物必须是原子的工作单元
Consistent(一致性) 事物完成时,必须所有数据保持一致状态
Isolation(隔离性) 并发事物所做的修改必须个其他事物所做的修改是隔离的
Duration(持久性) 事物完成之后,对系统的影响是永久性的
MySQL里的事物处理过程
1)记录 redo 和 undo logo文件 记录事物操作日志,确保日志在磁盘上的持久化
2)更新数据记录
3)提交事务,redo写入commit记录
4)事物处理完之后清理undo文件,释放锁
分布式事物
1、分布式事物产生的原因:数据库分库分表
2、SOA化(微服务)
X/OpenDTP 事物模型( X/Open Distributed Transaction procession reference Model)
X/Open 是一个组织机构,定义出的一套分布式事物标注,定义了规范的API接口
2PC(two-phase-commit) ,用来保证分布式事物的完整性
J2EE 遵循了X/Open DTP 规范,设计并实现了java里面的分布式事务编程接口规范-JTA
XA 是X/Open DTP 定义的中间件 和数据库之间的接口规范,XA接口函数由数据库厂商提供
X/OpenDTP 角色
AP application 应用节点
RM resouces manager 资源管理器(一般指数据库)
TM transaction manager 事物管理器,事物协调者
1、2pc (two-phase-commit)
CAP理论分布式环境下的不可靠因数
阶段一:提交一个事物请求(Prepare事物)
1).TM向所有的AP发送事物内容,并询问是否可以执行事物的提交操作,并等待各个AP的响应
2).执行事物:各个AP节点执行事物操作,将undo和redo信息记录到事物日志中,尽量把提交过程中的所有消耗时间的操作和准备都提前完成后确保后续事物提交的成功率
3).各个AP向TM反馈事物询问的响应:各个AP成功执行了事物操作,那么反馈给TM YES的response;如果AP没有成功执行事物,就反馈NO的response;
阶段二:执行事物提交(commit or abort 事物)
1).执行提交事物
如果各个AP响应为YES,就执行commit事物
2).中断事物提交
如果其中有一个AP响应未NO,就执行abort事情
假设一个事物的提交过程总共需要30s,其中prepare 操作需要28s(事物日志的落地和磁盘及各种IO操作),而真正commit只需要2s.那么commit阶段出现失败的概率就非常小,大大增加了分布式事物的成功率
2、3PC(three-phase-commit)
阶段一 :canCommit
阶段二 :preCommit
阶段三 : doCommit
3PC 是为了减少失败概率