一种分布式事务处理方法及系统技术方案

技术编号:13862755 阅读:82 留言:0更新日期:2016-10-19 12:00
一种分布式事务处理方法及系统,该方法包括:分布式事务的各个事务分支所对应的事务分支处理单元接收到事务分支SQL语句后,将其发送至隔离控制器进行加锁操作;隔离控制器从数据库查询得到与事务分支SQL语句相对应的各数据行,并从数据库的事务锁表查询得到各数据行所对应的加锁记录后,通过向事务锁表写入加锁记录,为各数据行中分布式事务尚未加锁的数据行加锁;加锁记录中包含分布式事务的全局事务标识符;加锁操作成功后,事务分支处理单元执行事务分支SQL语句;事务分支处理单元接收到事务分支提交指令或事务分支回滚指令后,指示隔离控制器根据全局事务标识符从事务锁表中删除全局事务标识符所对应的加锁记录。

【技术实现步骤摘要】

本申请涉及分布式数据处理领域,尤其涉及一种分布式事务处理方法及系统
技术介绍
分布式事务通常包含多个本地事务分支,每个本地事务分支可以对相应的数据库进行操作。多个分布式事务可以在一个数据库并发执行,每个分布式事务可能需要对数据库的多个表执行插入(INSERT)、删除(DELETE)、修改(UPDATE)、查询(SELECT)等操作。在这种情况下,数据库需要保证每一分布式事务在其对数据库的修改操作提交前,该修改所对应的数据行对其它分布式事务是不可见的;或者说,不能让其它分布式事务读取到该分布式事务的中间状态,保障分布式事务的隔离性。例如,对于A账户向B账户转账100元的业务,实现该业务可能需要先向B账户增加100元,再从A账户减去100元;在这种情况下,不能让其它事务(例如,账户查询事务)看到B账户金额已经增加,但A账户还没有扣款的状态。否则,一旦对A账户的扣款动作执行失败,B账户中增加的100元可能已经被其它事务减掉,因此将出现针对B账户的回滚操作失败的情况。解决上述分布式事务的隔离性问题的技术包括:数据库锁、写时复制、多版本控制等。现有的分布式关系型数据库系统,例如MySQL,通常采用XA两阶段提交协议实现分布式事务的管理,并采用单机数据库锁来进行分布式事务的并发控制,以保障分布式事务的隔离性。XA两阶段提交协议的第一阶段是表决阶段,在该阶段,所有参与者都将本事务分支能否成功执行的反馈信息发送给协调者;第二阶段是执行阶段,在该阶段,协调者根据所有参与者发送的反馈信息,通知所有参与者步调一致地在所有事务分支上提交,或者在所
有事务分支上回滚。每个参与者在进行本地操作时,都会进行数据库锁竞争,只有先获得锁才能够参与两阶段操作,否则将报告事务分支执行失败。XA两阶段提交协议要求数据库自身实现该协议,而分布式环境下的并发控制的性能完全取决于数据库系统自身对该协议的实现程度。XA两阶段提交协议是一种阻塞协议,数据库系统实现该协议时要求在分布式事务的每一阶段都等待最慢的一个事务分支完成,即使在分布式事务的不同事务分支不操作相同的数据行,不存在锁冲突的情况下,各事务分支的数据库连接依然会被挂起,并且所有的事务分支所占用的资源都不能够释放,以便在第二阶段进行数据库锁等资源的释放,以防止在分布式事务(全局事务)提交前释放资源所造成的数据不一致,以及分布式事务的中间状态被其它分布式事务读取到等问题。对于业务流量极高的大规模互联网企业,难以接受XA两阶段提交协议所带来的巨大性能开销。此外,如果数据库系统使用MySQL,在实现XA两阶段提交协议时还存在数据不一致的风险。具体地说,MySQL数据库的主备同步是通过Binlog(MySQL数据库的日志文件)复制完成的,出于性能的考虑,Binlog中仅记录分布式事务在第二阶段的日志(Commit日志),并不记录分布式事务在第一阶段的日志(Prepare日志)。如果在分布式事务的所有事务分支第一阶段完成,还没有进行全局事务的提交时,某一主数据库(主库)宕机,由于此时对应的事务分支的Prepare日志没有同步到相应的备库,因此在主库和备库之间发生了数据的不一致,这在实际业务中是不能承受的错误。
技术实现思路
本申请的目的在于提供一种分布式事务处理方法及系统。为了达到上述目的,本申请公开了一种分布式事务处理方法,该方法包括:分布式事务的各个事务分支所对应的事务分支处理单元接收到事务分支SQL语句后,将其发送至隔离控制器进行加锁操作;隔离控制器从数据库查询得到与所述事务分支SQL语句相对应的各数
据行,并从数据库的事务锁表查询得到各数据行所对应的加锁记录后,通过向事务锁表写入加锁记录,为所述各数据行中所述分布式事务尚未加锁的数据行加锁;所述加锁记录中包含所述分布式事务的全局事务标识符;加锁操作成功后,事务分支处理单元执行所述事务分支SQL语句;事务分支处理单元接收到事务分支提交指令或事务分支回滚指令后,指示隔离控制器根据全局事务标识符从事务锁表中删除所述全局事务标识符所对应的加锁记录。此外,所述加锁记录中还包含如下作为所述事务锁表的唯一索引的字段:数据行所属表的表名,数据行的主键值和互斥锁标记;对数据行加互斥锁时,将所述加锁记录中的互斥锁标记字段置为预先设定的互斥锁标记值。此外,采用如下方式为数据行加共享锁:如果当前没有其它分布式事务为对应数据行加共享锁,则通过向事务锁表写入两行加锁记录为对应数据行加共享锁:其中一行加锁记录的互斥锁标记字段的值为所述预先设定的互斥锁标记值,另一行加锁记录的互斥锁标记字段的值为所述全局事务标识符;如果其它分布式事务已为对应数据行加共享锁,则通过向事务锁表写入一行加锁记录为对应数据行加共享锁,该加锁记录的互斥锁标记字段的值为所述全局事务标识符。此外,该方法还包括:事务分支处理单元接收到读已提交查询语句后,将其发送至隔离控制器;隔离控制器从数据库查询得到与所述读已提交查询语句相对应的各数据行,并从数据库的事务锁表查询得到各数据行所对应的加锁记录后,判断其它分布式事务是否已为所述读已提交查询语句相对应的各数据行中的一行或多行加互斥锁;如果否,则将所述读已提交查询语句相对应的各数据行返回给事务分支处理单元;所述读已提交查询语句为包含用于声明不读取其它分布式事务的中间状态的注释信息的查询语句。此外,该方法还包括:所述分布式事务的提交方向事务管理器注册所述分布式事务,在分布式事务注册后,向事务分支处理单元发送所述事务分支SQL语句;接收到所述事务分支SQL语句之后、将所述事务分支SQL语句发送至隔离控制器之前,事务分支处理单元向事务管理器注册所述事务分支SQL语句所对应的事务分支;执行所述事务分支SQL语句后,事务分支处理单元向所述分布式事务的提交方、或向所述分布式事务的提交方和事务管理器汇报事务分支的执行状态。此外,该方法还包括:所述分布式事务的提交方通过向事务管理器发送全局事务提交指令对所述分布式事务进行提交;所述分布式事务的提交方通过向事务管理器发送全局事务回滚指令对所述分布式事务进行回滚;事务管理器接收到全局事务提交指令后向各事务分支处理单元发送所述事务分支提交指令;事务管理器接收到全局事务回滚指令后、或在预先设定的时间内未收到所述分布式事务的提交方发送的全局事务提交指令时,向各事务分支处理单元发送所述事务分支回滚指令。为了达到上述目的,本申请还公开了一种分布式事务处理系统,该系统中包括:分布式事务的各个事务分支所对应的事务分支处理单元,隔离控制器,数据库;其中:事务分支处理单元,用于在接收到事务分支SQL语句后,将其发送至隔离控制器进行加锁操作;隔离控制器,用于在从数据库查询得到与所述事务分支SQL语句相对应的各数据行,并从数据库的事务锁表查询得到各数据行所对应的加锁记录后,通过向事务锁表写入加锁记录,为所述各数据行中所述分布式事务尚未加锁的数据行加锁;所述加锁记录中包含所述分布式事务的全局事务标识符;事务分支处理单元,还用于在加锁操作成功后,执行所述事务分支SQL
语句;事务分支处理单元,还用于在接收到事务分支提交指令或事务分支回滚指令后,指示隔离控制器根据全局事务标识符从事务锁表中删除所述全局事务标识符所对应的本文档来自技高网
...

【技术保护点】
一种分布式事务处理方法,其特征在于,该方法包括:分布式事务的各个事务分支所对应的事务分支处理单元接收到事务分支SQL语句后,将其发送至隔离控制器进行加锁操作;隔离控制器从数据库查询得到与所述事务分支SQL语句相对应的各数据行,并从数据库的事务锁表查询得到各数据行所对应的加锁记录后,通过向事务锁表写入加锁记录,为所述各数据行中所述分布式事务尚未加锁的数据行加锁;所述加锁记录中包含所述分布式事务的全局事务标识符;加锁操作成功后,事务分支处理单元执行所述事务分支SQL语句;事务分支处理单元接收到事务分支提交指令或事务分支回滚指令后,指示隔离控制器根据全局事务标识符从事务锁表中删除所述全局事务标识符所对应的加锁记录。

【技术特征摘要】
1.一种分布式事务处理方法,其特征在于,该方法包括:分布式事务的各个事务分支所对应的事务分支处理单元接收到事务分支SQL语句后,将其发送至隔离控制器进行加锁操作;隔离控制器从数据库查询得到与所述事务分支SQL语句相对应的各数据行,并从数据库的事务锁表查询得到各数据行所对应的加锁记录后,通过向事务锁表写入加锁记录,为所述各数据行中所述分布式事务尚未加锁的数据行加锁;所述加锁记录中包含所述分布式事务的全局事务标识符;加锁操作成功后,事务分支处理单元执行所述事务分支SQL语句;事务分支处理单元接收到事务分支提交指令或事务分支回滚指令后,指示隔离控制器根据全局事务标识符从事务锁表中删除所述全局事务标识符所对应的加锁记录。2.根据权利要求1所述的方法,其特征在于,所述加锁记录中还包含如下作为所述事务锁表的唯一索引的字段:数据行所属表的表名,数据行的主键值和互斥锁标记;对数据行加互斥锁时,将所述加锁记录中的互斥锁标记字段置为预先设定的互斥锁标记值。3.根据权利要求2所述的方法,其特征在于,采用如下方式为数据行加共享锁:如果当前没有其它分布式事务为对应数据行加共享锁,则通过向事务锁表写入两行加锁记录为对应数据行加共享锁:其中一行加锁记录的互斥锁标记字段的值为所述预先设定的互斥锁标记值,另一行加锁记录的互斥锁标记字段的值为所述全局事务标识符;如果其它分布式事务已为对应数据行加共享锁,则通过向事务锁表写入一行加锁记录为对应数据行加共享锁,该加锁记录的互斥锁标记字段的值为所述全局事务标识符。4.根据权利要求2所述的方法,其特征在于,该方法还包括:事务分支处理单元接收到读已提交查询语句后,将其发送至隔离控制器;隔离控制器从数据库查询得到与所述读已提交查询语句相对应的各数据行,并从数据库的事务锁表查询得到各数据行所对应的加锁记录后,判断其它分布式事务是否已为所述读已提交查询语句相对应的各数据行中的一行或多行加互斥锁;如果否,则将所述读已提交查询语句相对应的各数据行返回给事务分支处理单元;所述读已提交查询语句为包含用于声明不读取其它分布式事务的中间状态的注释信息的查询语句。5.根据权利要求1所述的方法,其特征在于,该方法还包括:所述分布式事务的提交方向事务管理器注册所述分布式事务,在分布式事务注册后,向事务分支处理单元发送所述事务分支SQL语句;接收到所述事务分支SQL语句之后、将所述事务分支SQL语句发送至隔离控制器之前,事务分支处理单元向事务管理器注册所述事务分支SQL语句所对应的事务分支;执行所述事务分支SQL语句后,事务分支处理单元向所述分布式事务的提交方、或向所述分布式事务的提交方和事务管理器汇报事务分支的执行状态。6.根据权利要求5所述的方法,其特征在于,该方法还包括:所述分布式事务的提交方通过向事务管理器发送全局事务提交指令对所述分布式事务进行提交;所述分布式事务的提交方通过向事务管理器发送全局事务回滚指令对所述分布式事务进行回滚;事务管理器接收到全局事务提交指令后向各事务分支处理单元发送所述事务分支提交指令;事务管理器接收到全局事务回滚指令后、或在预先设定的时间内未收到所述分布式事务的提交方发送的全局事务提交指令时,向各事务分支处理单元发送所述事务分支回滚指令。7.一种分布式事务处理系统,其特征在于,该系统中包括:分布式事务的各个事务分支所对应的事务分支处理单元,...

【专利技术属性】
技术研发人员:张松树
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1