分布式事务概念
事务,我们在介绍MySQL的时候都已经介绍过了,在这就不过多介绍。用一句话总结:
事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
上文说到MySQL分库分表之后,会将之前单机下一个逻辑单位拆分成多个单位,而这多个单位也要作为一个逻辑单位执行,这就会有分布式事务的问题。那什么是分布式事务呢?我们看一下wiki上的解释:
Adistributedtransactionisadatabasetransactioninwhichtwoormorenetworkhostsareinvolved.
分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成。不过事务一词含义随着SOA架构逐渐扩大,根据上下文不同,可分为两类:
Systemtransaction;Businesstransaction。前者多指数据库事务,后者则多对应一个业务交易。
然而,如何实现分布式事务呢?
分布式事务常用模式
XA模式
在介绍实现方式之前,先介绍一个基础的协议XA协议。
最早的分布式事务模型是由X/Open国际联盟提出的X/OpenDistributedTransactionProcessing(DTP)模型,也称为XA协议。
XA协议通过一个全局事务管理器与多个资源管理器进行交互。全局事务管理器负责管理全局事务状态和参与事务的资源,资源管理器则负责具体的资源操作,XA协议与应用程序的关系如图所示:
分布式事务—常见模式与实现方案DTP模型定义如下角色:
AP(ApplicationProgram):既应用程序,可以理解为使用DTP分布式事务的程序。**RM(ResourceManager)**:即资源管理器,可以理解为事务的参与者,一般情况下是指一个数据库实例,通过资源管理器对该数据库进行控制,资源管理器控制着分支事务。TM(TransactionManager):事务管理器,负责协调和管理事务,事务管理器控制着全局事务,管理事务生命周期,并协调各个RM。全局事务是指分布式事务处理环境中,需要操作多个数据库共同完成一个工作,这个工作即是一个全局事务。DTP模型定义TM和RM之间通讯的接口规范叫XA。
以上三个角色之间的交互方式如下:
1.TM向AP提供应用程序编程接口,AP通过TM提交及回滚事务。2.TM交易中间件通过XA接口来通知RM数据库事务的开始、结束以及提交、回滚等。二阶提交协议和三阶提交协议就是根据这一思想衍生出来的。可以说二阶段提交其实就是实现XA分布式事务的关键。
2PC
两阶段提交(Two-phaseCommit,2PC)是XA用于在全局事务中协调多个资源的机制。通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。
分布式事务—常见模式与实现方案1.准备阶段
协调者询问参与者事务是否执行成功,参与者发回事务执行结果。
准备阶段分为以下三个步骤:
协调者向所有的参与者发送事务执行请求,并等待参与者反馈事务执行结果;事务参与者收到请求之后,执行事务但不提交,并记录事务日志;参与者将自己事务执行情况反馈给协调者,同时阻塞等待协调者的后续指令。
2.提交阶段
在经过第一阶段协调者的询盘之后,各个参与者会回复自己事务的执行情况,这时候存在3种可能性:
所有的参与者都回复能够正常执行事务。一个或多个参与者回复事务执行失败。协调者等待超时。对于第1种情况,协调者将向所有的参与者发出提交事务的通知,具体步骤如下:
协调者向各个参与者发送