CN106445644B - 基于改进的一阶段提交的分布式事务的处理方法和装置 - Google Patents
基于改进的一阶段提交的分布式事务的处理方法和装置 Download PDFInfo
- Publication number
- CN106445644B CN106445644B CN201610785730.6A CN201610785730A CN106445644B CN 106445644 B CN106445644 B CN 106445644B CN 201610785730 A CN201610785730 A CN 201610785730A CN 106445644 B CN106445644 B CN 106445644B
- Authority
- CN
- China
- Prior art keywords
- sql
- transaction
- submission
- distributed transaction
- failure
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于改进的一阶段提交的分布式事务的处理方法和装置,其中,该方法包括:对各数据库执行应用交易的SQL操作;对SQL操作进行解析,确定出事务相关型的SQL操作;确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中;执行SQL操作,在执行SQL操作成功后,则调用提交操作;在提交操作成功之后,触发分布式事务锁的释放操作;在提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。实现了分布式事务的一致性,可以获取分布式事务的提交状态,对失败的事务进行恢复处理,保证了一阶段提交的提交率。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种基于改进的一阶段提交的分布式事务的处理方法和装置。
背景技术
随着互联网技术的发展,高并发访问、海量数据处理的业务场景越来越多,可以采用分布式事务处理方法对数据进行处理,分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点上。
现有技术中,基于两阶段提交方式为阻塞性协议,性能较差,无法在高并发场景下使用;传统一阶段提交方式分别独立执行各数据库事务操作,当其中某数据库操作失败后无法回滚其它数据库事务,因此无法直接支持分布式事务。
在各数据库独立的一阶段提交在基础上调整下执行顺序,将各库事务开始、数据操作以及事务提交分类集中在一块处理,当某一数据库操作失败时,可以顺序回滚各库事务,因此可以较好的支持分布式事务,这种方式我们称之为“最大努力一阶段提交”。
最大努力一阶段提交可以高效的实现分布式事务,但在事务集中提交环节,如果由于基础设施故障致使部分事务提交成功,部分失败时,其中,基础设施包括了网络、数据库等等,由于无法对已提交事务进行回滚,从而会导致分布式事务不一致的问题。
发明内容
本发明提供一种基于改进的一阶段提交的分布式事务的处理方法和装置,用以解决现有技术中两阶段提交效率较差,传统一阶段提交无法支持分布式事务、最大努力一阶段提交由于基础设施故障导致的分布式事务不一致的问题。
本发明的一方面是提供一种基于改进的一阶段提交的分布式事务的处理方法,包括:
对各数据库执行应用交易的结构化查询语言(Structured Query Language,简称SQL)操作;
对所述SQL操作进行解析,确定出事务相关型的SQL操作;
确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到所述应用交易中;
执行所述SQL操作,在执行所述SQL操作成功后,则调用提交操作;
在所述提交操作成功之后,触发分布式事务锁的释放操作;
在所述提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。
本发明的另一方面是提供一种基于改进的一阶段提交的分布式事务的处理装置,包括:
访问模块,用于对各数据库执行应用交易的SQL操作;
解析模块,用于对所述SQL操作进行解析,确定出事务相关型的SQL操作;
插入模块,用于确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到所述应用交易中;
提交模块,用于执行所述SQL操作,在执行所述SQL操作成功后,则调用提交操作;
释放模块,用于在所述提交操作成功之后,触发分布式事务锁的释放操作;
重试模块,用于在所述提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。
本发明的技术效果是:通过对各数据库执行应用交易的SQL操作;对SQL操作进行解析,确定出事务相关型的SQL操作;确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中;执行SQL操作,在执行SQL操作成功后,则调用提交操作;在提交操作成功之后,触发分布式事务锁的释放操作;在提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。改进后的一阶段提交方式相比与两阶段提交,执行效率更高。通过若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定当前操作涉及分布式事务,则会自动生成分布式事务锁的插入语句,将分布式事务锁的插入语句插入到应用交易中,可以分布式各子事务的提交操作不成功的时候,对失败的提交操作进行预设重试次数的再提交操作。进而实现了分布式事务的一致性,可以获取分布式事务的提交状态,对失败的事务进行恢复处理,保证了一阶段提交的提交率。
附图说明
图1为本发明实施例一提供的基于改进的一阶段提交的分布式事务的处理方法的流程图;
图2为本发明实施例二提供的基于改进的一阶段提交的分布式事务的处理方法的流程图;
图3为本发明实施例三提供的基于改进的一阶段提交的分布式事务的处理装置的结构示意图;
图4为本发明实施例四提供的基于改进的一阶段提交的分布式事务的处理装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一提供的基于改进的一阶段提交的分布式事务的处理方法的流程图,如图1所示,本实施例的方法,包括:
步骤101、对各数据库执行应用交易的SQL操作。
在本实施例中,具体的,本发明分为了分布式数据访问装置、分布式事务管理器装置、分布式事务锁装置、消息队列装置、分布式事务异常恢复装置。这些装置可以为虚拟模块,也可以为实体装置。
分布式数据访问装置访问各数据库,这一个过程为分布式数据访问装置对各数据库执行应用交易的SQL操作。
具体来说,通过本发明提供的数据访问装置进行数据库访问,在各应用在开启事务时,分布式事务管理器开始工作,依次开启各物理数据库事务。进行数据库访问的过程为执行应用交易的SQL操作的过程。其中,分布式数据访问装置为应用数据操作的客户端,负责SQL的解析、路由、物理数据源管理与最终SQL执行,同时调用分布式事务管理器实现事务管理功能;分布式数据访问装置实现了JDBC接口,JDBC接口为JAVA数据库连接接口,应用可直接以JDBC方式访问数据库,也可通过Spring或者Mybatis等方式进行集成。
步骤102、对SQL操作进行解析,确定出事务相关型的SQL操作。
其中,步骤102的具体实现方式为:
对SQL操作进行解析;若确定SQL操作为select操作,则确定SQL操作为事务无关型的SQL操作;若SQL操作为CUD操作,则确定SQL操作为视为事务相关型的SQL操作。
在本实施例中,具体的,分布式数据访问装置会对SQL操作进行解析,确定出事务相关型的SQL操作;具体来说,分布式数据访问装置会对SQL操作进行解析,若SQL操作为select操作,则确定SQL操作为事务无关型的SQL操作,若SQL操作为CUD操作,则确定SQL操作为视为事务相关型的SQL操作。其中,CUD操作包括了insert、update、delete。
其中,对SQL操作进行解析的过程中,可以识别出SQL操作的逻辑表名、拆分列名以及拆分值。数据库水平拆分前表名,前表名即为逻辑表名,例如用户名user,拆分后得到的物理表名一般都会带有后缀,如user_1、user_2、user_3、…、user_n;应用通过分布式数据访问装置访问数据库时SQL操作中使用逻辑表名即可,由分布式数据访问装置在SQL解析路由之后,自动将逻辑表名替换成物理表名。
步骤103、确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中。
其中,步骤103的具体实现方式为:
根据预设的应用配置的路由规则,计算与每个SQL操作对应的数据库;
若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定涉及分布式事务,自动生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中。
在本实施例中,具体的,分布式数据访问装置确定是否具有任意两个事务相关型的SQL操作归属于不同的数据库,若具有,则生成分布式事务锁的插入(insert,简称insert)语句;具体来说,分布式数据访问装置对SQL操作完成解析后,分布式数据访问装置会根据预设的应用配置的路由规则,计算每个SQL操作对应的数据库,若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定当前操作涉及分布式事务,认为需要分布式事务保证,此时会启动事务快照,然后分布式数据访问装置,会自动生成分布式事务锁的插入语句,分布式数据访问装置将分布式事务锁的插入语句插入到应用交易中。
更具体的说,分布式数据访问装置根据预设的应用配置的路由规则,去计算物理数据源,从而计算出数据库名、物理表名等等;其中,分布式数据访问装置内存储有数据库名与数据库连接之间的映射关系,根据数据库名即可取得数据库连接。应用配置的路由规则,在应用开发时为每个表定义了路由规则,规则配置结构如下代码所示:
ShardingRule:{
shardingTable:#tableName#,
rule:{
db:{shardingColumn:#columnName#,
shardingFunction;#dbShardingFunction#},
table:{shardingColumn:#columnName#;
shardingFunction:#tableShardingFunction#;},
},
……
}
其中,shardingTable项为表名,与逻辑表名一致;db项为库路由规则;table项为表路由规则;shardingColumn为规则对应的拆分列名,分布式数据访问装置根据SQL操作的SQL语句中此列值,计算最终目标数据库或表;并且,其中的shardingFunction为路由函数,输入为拆分列名以及对应的值,输出为经计算后得出的数据库名或表名。
在确定出了SQL的数据库名之后,若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定涉及分布式事务,分布式事务管理器会根据SQL路由对应的表名、拆分列名以及拆分列值,然后调用分布式事务锁装置去生成分布式事务锁插入语句,其中,生成分布式事务锁的插入语句也是一个SQL语句;然后,将生成的分布式事务锁的插入语句,添加到应用的事务中。生成分布式事务锁的插入语句,如下所示:
INSERT INTO TRANSACTION_LOCK VALUES(表名,列名,值,交易流水号);
其中,TRANSACTION_LOCK为分布式事务锁存储表。
最后替换表名生成最终SQL,获取物理数据库连接进行实际的数据库访问操作。
其中,分布式事务锁装置负责分布式事务执行中产生的锁的存储、插入、删除与查询;同时,本实施例中的分布式事务锁区别于数据库自身锁,是为保证分布式事务隔离性而设计的一种逻辑锁。分布式事务锁装置包括分布式事务锁数据表以及对应的增加、删除与查询功能。分布式锁数据表部署在应用数据库,与应用数据垂直拆分方案一致,但无需进行水平拆分,每个库一张表即可,该分布式事务锁的表结构如下:
表1分布式事务锁的表结构
表名(PK) | 拆分列(PK) | 拆分值(PK) | 交易流水号 |
Account | AccNo | xxxxxxxxx | aaaaaa |
Card | cardNo | yyyyyyyyy | bbbbbb |
分布式事务锁的表结构的主键为表名+拆分列+拆分值,分布式事务管理器调用分布式事务锁装置,去生成分布式事务锁的插入语句,并在应用数据操作之前执行,与应用数据事务一起进行提交。
步骤104、执行SQL操作,在执行SQL操作成功后,则调用提交操作。
其中,步骤104的具体实现方式为:
执行SQL操作;在执行SQL操作的过程中出现异常时,调用回滚操作,以逆序执行各数据库的回滚操作;在执行SQL操作的过程成功,则依次执行各数据库的提交操作。
在本实施例中,具体的,若分布式事务锁的插入语句插入成功,则分布式数据访问装置执行应用交易对应的SQL操作。若分布式数据访问装置执行应用交易对应的SQL操作的过程中,出现异常,则应用事务管理装置调用回滚操作,即rollback()操作,以使分布式事务管理装置会逆序执行各数据库的回滚操作;若分布式数据访问装置执行应用交易对应的SQL操作的过程执行成功,则应用事务管理装置调用提交操作,即commit()操作,分布式事务管理装置依次执行各数据库的提交操作。
其中,以2个数据库为例,最终完整的数据库操作,完成回滚操作和提交操作的伪代码如下:
/**开始事务,当应用事务管理器执行begin()时触发**/
Connection1.setAutoCommit(false)
Connection2.setAutoCommit(false)
/**数据操作**/
Connection1:INSERT INTO db1.TRANSACTION_LOCK VALUES(“表名”,“拆分列”,“拆分值”,“交易流水号”);/*自动添加*/
Connection1:INSERT INTO db1…
Connection1:UPDATE db1…
Connection1:…
Connection2:INSERT INTO db2.TRANSACTION_LOCK VALUES(“表名”,“拆分列”,“拆分值”,“交易流水号”);/*自动添加*/
Connection2:INSERT INTO db1…
Connection2:UPDATE db1…
Connection2:…
/**事务提交,当应用事务管理器执行commit()时触发**/
Connection1.commit()
Connection2.commit()
/**事务回滚,当应用事务管理器执行rollback()时触发**/
Connection1.rollback()
Connection2.rollback()
步骤105、在提交操作成功之后,触发分布式事务锁的释放操作。
在本实施例中,具体的,确定分布式各子事务的提交操作是否成功,若成功,则分布式事务管理器或异常恢复装置会通过消息队列装置进行异步触发分布式事务锁释放操作,以完成分布式事务锁的删除。
步骤106、在提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。
在本实施例中,具体的,若提交操作不成功,则分布式事务管理装置会对失败的提交操作进行预设重试次数的再提交操作。此时,当错误模型出现时即Connection1.commit()成功执行,Connection2.commit()超时异常,此时分布式事务管理器会对commit操作进行重试,可以进行预设重试次数的再提交操作,以使提交操作可以成功。
本实施例通过对各数据库执行应用交易的SQL操作;对SQL操作进行解析,确定出事务相关型的SQL操作;确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中;执行SQL操作,在执行SQL操作成功后,则调用提交操作;在提交操作成功之后,触发分布式事务锁的释放操作;在提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。改进后的一阶段提交方式相比与两阶段提交,执行效率更高。通过若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定当前操作涉及分布式事务,则会自动生成分布式事务锁的插入语句,将分布式事务锁的插入语句插入到应用交易中,可以分布式各子事务的提交操作不成功的时候,对失败的提交操作进行预设重试次数的再提交操作。进而实现了分布式事务的一致性,可以获取分布式事务的提交状态,对失败的事务进行恢复处理,保证了一阶段提交的提交率。
图2为本发明实施例二提供的基于改进的一阶段提交的分布式事务的处理方法的流程图,在实施例一的基础上,如图2所示,本实施例的方法,在步骤106之后,还包括:
步骤201、若确定在预设重试次数的再提交操作失败,则确定提交操作失败的原因;在提交操作失败的原因为应用服务器宕机时,确定与失败的应用交易的流水号;从存储的事务快照中解析出与提交各子事务对应的目标库信息,根据目标库信息,确定与流水号对应的分布式事务锁。
在本实施例中,具体的,在步骤106之后,若在预设重试次数的再提交操作失败,则分布式事务管理装置将事务快照信息,通过消息队列装置异步推送给分布式事务异常恢复装置,同时,去确定提交操作失败的原因。若由于应用服务器宕机导致分布式事务的提交操作失败,则监控系统甄别出中断交易对应的流水号,即确定出与失败的应用交易的流水号;然后将携带有流水号的事务异常通知发送给分布式事务异常恢复装置。分布式事务异常恢复装置收到事务异常通知之后,从消息队列装置获取事务快照,从中解析出提交各子事务对应的目标库信息;由于一旦如果应用分布式事务未结束或异常中断,则数据库中保存有该事务对应的分布式事务锁锁记录,由于主键冲突,则会触发加锁失败异常,去实现分布式事务的隔离性保证,进而分布式事务异常恢复装置根据目标库信息,确定出与流水号对应的分布式事务锁。
其中,消息队列装置负责分布式事务实现模型中消息的异步发送,在本发明中主要用于异步完成分布式事务锁的释放以及分布式事务异常恢复。
步骤202、根据与流水号对应的分布式事务锁,确定与流水号对应的子事务是否提交;在确定与流水号对应的子事务提交时,根据子事务的交易类型进行恢复操作。
在本实施例中,具体的,分布式事务异常恢复装置根据与流水号对应的分布式事务锁,确定与流水号对应的子事务是否提交。在确定与流水号对应的子事务提交时,,分布式事务异常恢复装置根据该子事务的交易类型,进行与子事务的交易类型对应的恢复操作。在恢复操作完成之后,分布式事务异常恢复装置根据目标库信息,删除与流水号对应的分布式事务锁的记录。
其中,举例来说,恢复操作的具体过程如下:若子事务的交易类型为可冲正类交易,则恢复操作为对已提交的子事务调用其定义的冲正交易;若子事务的交易类型为可重做类交易,且若交易本身是幂等性的,即即重复执行不会导致数据不一致,则恢复操作为重新执行正向交易,若交易本身不是幂等性的,则恢复操作为根据事务快照,重新执行未提交事务中对应的SQL操作。
并且,分布式事务异常恢复装置可对外提供封装服务,运维平台或者外围系统可据此封装服务,去查询指定业务流水号对应的分布式事务实时处理状态。具体来说,分布式事务异常恢复装置可以接收到用户或者其他装置发送的查询信息,查询信息包括了流水号,分布式事务异常恢复装置确定与流水号对应的分布式事务的处理状态。
本实施例通过对各数据库执行应用交易的SQL操作;对SQL操作进行解析,确定出事务相关型的SQL操作;确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中;执行SQL操作,在执行SQL操作成功后,则调用提交操作;在提交操作成功之后,触发分布式事务锁的释放操作;在提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。改进后的一阶段提交方式相比与两阶段提交,执行效率更高。通过若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定当前操作涉及分布式事务,则会自动生成分布式事务锁的插入语句,将分布式事务锁的插入语句插入到应用交易中,可以分布式各子事务的提交操作不成功的时候,对失败的提交操作进行预设重试次数的再提交操作,并且在预设重试次数的再提交操作失败之后,可以进行恢复操作。进而实现了分布式事务的一致性,可以获取分布式事务的提交状态,对失败的事务进行恢复处理,保证了一阶段提交的提交率。同时,提供了封装服务,运维平台或者外围系统可据此封装服务,去查询指定业务流水号对应的分布式事务实时处理状态。
图3为本发明实施例三提供的基于改进的一阶段提交的分布式事务的处理装置的结构示意图,如图3所示,本实施例提供的装置,包括:
访问模块31,用于对各数据库执行应用交易的SQL操作;
解析模块32,用于对SQL操作进行解析,确定出事务相关型的SQL操作;
插入模块33,用于确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中;
提交模块34,用于执行SQL操作,在执行SQL操作成功后,则调用提交操作;
释放模块35,用于在提交操作成功之后,触发分布式事务锁的释放操作;
重试模块36,用于在提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。
其中,解析模块32,具体用于:
对SQL操作进行解析;
若确定SQL操作为select操作,则确定SQL操作为事务无关型的SQL操作;
若SQL操作为CUD操作,则确定SQL操作为视为事务相关型的SQL操作。
插入模块33,具体用于:
根据预设的应用配置的路由规则,计算与每个SQL操作对应的数据库;
若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定涉及分布式事务,自动生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中。
提交模块34,具体用于:
执行SQL操作;
在执行SQL操作的过程中出现异常时,调用回滚操作,以逆序执行各数据库的回滚操作;
在执行SQL操作的过程成功,则依次执行各数据库的提交操作。
本实施例的基于改进的一阶段提交的分布式事务的处理装置可执行本发明实施例一提供的基于改进的一阶段提交的分布式事务的处理方法,其实现原理相类似,此处不再赘述。
本实施例通过对各数据库执行应用交易的SQL操作;对SQL操作进行解析,确定出事务相关型的SQL操作;确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中;执行SQL操作,在执行SQL操作成功后,则调用提交操作;在提交操作成功之后,触发分布式事务锁的释放操作;在提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。改进后的一阶段提交方式相比与两阶段提交,执行效率更高。通过若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定当前操作涉及分布式事务,则会自动生成分布式事务锁的插入语句,将分布式事务锁的插入语句插入到应用交易中,可以分布式各子事务的提交操作不成功的时候,对失败的提交操作进行预设重试次数的再提交操作。进而实现了分布式事务的一致性,可以获取分布式事务的提交状态,对失败的事务进行恢复处理,保证了一阶段提交的提交率。
图4为本发明实施例四提供的基于改进的一阶段提交的分布式事务的处理装置的结构示意图,在实施例三的基础上,如图4所示,本实施例提供的装置,还包括:
恢复模块41,用于在重试模块36对失败的提交操作进行预设重试次数的再提交操作之后,若确定在预设重试次数的再提交操作失败,则确定提交操作失败的原因;在再提交操作失败的原因为应用服务器宕机时,确定与失败的应用交易的流水号;从存储的事务快照中解析出与提交各子事务对应的目标库信息,根据目标库信息,确定与流水号对应的分布式事务锁;根据与流水号对应的分布式事务锁,确定与流水号对应的子事务是否提交;在确定与流水号对应的子事务提交时,根据子事务的交易类型进行恢复操作。
本实施例的基于改进的一阶段提交的分布式事务的处理装置可执行本发明实施例二提供的基于改进的一阶段提交的分布式事务的处理方法,其实现原理相类似,此处不再赘述。
本实施例通过对各数据库执行应用交易的SQL操作;对SQL操作进行解析,确定出事务相关型的SQL操作;确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到应用交易中;执行SQL操作,在执行SQL操作成功后,则调用提交操作;在提交操作成功之后,触发分布式事务锁的释放操作;在提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。改进后的一阶段提交方式相比与两阶段提交,执行效率更高。通过若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定当前操作涉及分布式事务,则会自动生成分布式事务锁的插入语句,将分布式事务锁的插入语句插入到应用交易中,可以分布式各子事务的提交操作不成功的时候,对失败的提交操作进行预设重试次数的再提交操作,并且在预设重试次数的再提交操作失败之后,可以进行恢复操作。进而实现了分布式事务的一致性,可以获取分布式事务的提交状态,对失败的事务进行恢复处理,保证了一阶段提交的提交率。同时,提供了封装服务,运维平台或者外围系统可据此封装服务,去查询指定业务流水号对应的分布式事务实时处理状态。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种基于改进的一阶段提交的分布式事务的处理方法,其特征在于,包括:
对各数据库执行应用交易的结构化查询语言SQL操作;
对所述SQL操作进行解析,确定出事务相关型的SQL操作;其中,若确定SQL操作为select操作,则确定SQL操作为事务无关型的SQL操作;若SQL操作为CUD操作,则确定SQL操作为事务相关型的SQL操作;
确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到所述应用交易中;
执行所述SQL操作,在执行所述SQL操作成功后,则调用提交操作;
在所述提交操作成功之后,触发分布式事务锁的释放操作;
在所述提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。
2.根据权利要求1所述的方法,其特征在于,所述确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,包括:
根据预设的应用配置的路由规则,计算与每个SQL操作对应的数据库;
若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定涉及分布式事务,自动生成分布式事务锁的插入语句。
3.根据权利要求1所述的方法,其特征在于,所述执行所述SQL操作,在执行所述SQL操作成功后,则调用提交操作,包括:
执行所述SQL操作;
在执行所述SQL操作的过程中出现异常时,调用回滚操作,以逆序执行各数据库的回滚操作;
在执行所述SQL操作的过程成功,则依次执行各数据库的提交操作。
4.根据权利要求1-3任一项所述的方法,其特征在于,在所述提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作之后,还包括:
若确定在预设重试次数的再提交操作失败,则确定提交操作失败的原因;
在提交操作失败的原因为应用服务器宕机时,确定与失败的应用交易的流水号;
从存储的事务快照中解析出与提交各子事务对应的目标库信息,根据所述目标库信息,确定与流水号对应的分布式事务锁;
根据与流水号对应的分布式事务锁,确定与流水号对应的子事务是否提交;
在确定与流水号对应的子事务提交时,根据子事务的交易类型进行恢复操作。
5.一种基于改进的一阶段提交的分布式事务的处理装置,其特征在于,包括:
访问模块,用于对各数据库执行应用交易的SQL操作;
解析模块,用于对所述SQL操作进行解析,确定出事务相关型的SQL操作;其中,若确定SQL操作为select操作,则确定SQL操作为事务无关型的SQL操作;若SQL操作为CUD操作,则确定SQL操作为事务相关型的SQL操作;
插入模块,用于确定出具有任意两个事务相关型的SQL操作归属于不同的数据库时,生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到所述应用交易中;
提交模块,用于执行所述SQL操作,在执行所述SQL操作成功后,则调用提交操作;
释放模块,用于在所述提交操作成功之后,触发分布式事务锁的释放操作;
重试模块,用于在所述提交操作失败之后,对失败的提交操作进行预设重试次数的再提交操作。
6.根据权利要求5所述的装置,其特征在于,所述插入模块,具体用于:
根据预设的应用配置的路由规则,计算与每个SQL操作对应的数据库;
若确定任意两个事务相关型的SQL操作归属于不同的数据库,则确定涉及分布式事务,自动生成分布式事务锁的插入语句,并将分布式事务锁的插入语句插入到所述应用交易中。
7.根据权利要求5所述的装置,其特征在于,所述提交模块,具体用于:
执行所述SQL操作;
在执行所述SQL操作的过程中出现异常时,调用回滚操作,以逆序执行各数据库的回滚操作;
在执行所述SQL操作的过程成功,则依次执行各数据库的提交操作。
8.根据权利要求5-7任一项所述的装置,其特征在于,还包括:
恢复模块,用于在所述重试模块对失败的提交操作进行预设重试次数的再提交操作之后,若在预设重试次数的再提交操作失败,则确定提交操作失败的原因;在提交操作失败的原因为应用服务器宕机时,确定与失败的应用交易的流水号;从存储的事务快照中解析出与提交各子事务对应的目标库信息,根据所述目标库信息,确定与流水号对应的分布式事务锁;根据与流水号对应的分布式事务锁,确定与流水号对应的子事务是否提交;在确定与流水号对应的子事务提交时,根据子事务的交易类型进行恢复操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610785730.6A CN106445644B (zh) | 2016-08-30 | 2016-08-30 | 基于改进的一阶段提交的分布式事务的处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610785730.6A CN106445644B (zh) | 2016-08-30 | 2016-08-30 | 基于改进的一阶段提交的分布式事务的处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106445644A CN106445644A (zh) | 2017-02-22 |
CN106445644B true CN106445644B (zh) | 2019-11-05 |
Family
ID=58091894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610785730.6A Active CN106445644B (zh) | 2016-08-30 | 2016-08-30 | 基于改进的一阶段提交的分布式事务的处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106445644B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108959403A (zh) * | 2018-06-06 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 一种分布式事务处理方法及装置 |
CN110580232B (zh) * | 2018-06-08 | 2021-10-29 | 杭州宏杉科技股份有限公司 | 一种锁管理的方法及装置 |
CN109522098A (zh) * | 2018-11-28 | 2019-03-26 | 星环信息科技(上海)有限公司 | 分布式数据库中的事务处理方法、装置、系统和储存介质 |
CN109918177B (zh) * | 2019-02-19 | 2023-08-04 | 创新先进技术有限公司 | 分布式事务处理方法、装置及设备 |
US11188522B2 (en) | 2019-06-19 | 2021-11-30 | International Business Machines Corporation | Streamlined database commit for synchronized nodes |
CN110288255A (zh) * | 2019-06-28 | 2019-09-27 | 深圳前海微众银行股份有限公司 | 一种分布式事务的流程保障方法及装置 |
CN112579615A (zh) * | 2019-09-29 | 2021-03-30 | 北京沃东天骏信息技术有限公司 | 一种实现分布式锁的方法和装置 |
CN112650561B (zh) * | 2019-10-11 | 2023-04-11 | 金篆信科有限责任公司 | 事务管理方法、系统、网络设备和可读存储介质 |
CN111209142B (zh) * | 2020-01-02 | 2024-09-13 | 中国平安财产保险股份有限公司 | 跨数据库的事务管理方法、装置、设备及存储介质 |
US20210240516A1 (en) * | 2020-02-05 | 2021-08-05 | International Business Machines Corporation | Distributed transaction management |
CN111459963B (zh) * | 2020-04-07 | 2024-03-15 | 中国建设银行股份有限公司 | 核心账务交易并发处理方法及装置 |
CN111695901B (zh) * | 2020-06-17 | 2023-08-04 | 北京同邦卓益科技有限公司 | 账务凭证处理方法、装置、设备及存储介质 |
CN112883045B (zh) * | 2021-03-31 | 2024-05-17 | 中国工商银行股份有限公司 | 数据库事务拆分执行方法及装置 |
CN114328613B (zh) * | 2022-03-03 | 2022-07-05 | 阿里云计算有限公司 | Sql数据库中分布式事务的处理方法、装置及系统 |
CN116225724B (zh) * | 2023-05-09 | 2023-08-22 | 云筑信息科技(成都)有限公司 | 一种基于内存实现分布式重试调度的方法 |
CN117453750B (zh) * | 2023-12-21 | 2024-03-15 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101464884A (zh) * | 2008-12-31 | 2009-06-24 | 阿里巴巴集团控股有限公司 | 一种分布式任务系统及应用该系统的数据处理方法 |
CN102122288A (zh) * | 2010-12-21 | 2011-07-13 | 北京高森明晨信息科技有限公司 | 一种并发控制的方法及系统 |
US9047355B2 (en) * | 2006-02-13 | 2015-06-02 | Teradata Us, Inc. | Method and system for load balancing a distributed database |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130138614A1 (en) * | 2011-11-30 | 2013-05-30 | Mark Travis | Two-phase data locking transaction processing with distributed partitions and mirroring |
-
2016
- 2016-08-30 CN CN201610785730.6A patent/CN106445644B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9047355B2 (en) * | 2006-02-13 | 2015-06-02 | Teradata Us, Inc. | Method and system for load balancing a distributed database |
CN101464884A (zh) * | 2008-12-31 | 2009-06-24 | 阿里巴巴集团控股有限公司 | 一种分布式任务系统及应用该系统的数据处理方法 |
CN102122288A (zh) * | 2010-12-21 | 2011-07-13 | 北京高森明晨信息科技有限公司 | 一种并发控制的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106445644A (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106445644B (zh) | 基于改进的一阶段提交的分布式事务的处理方法和装置 | |
CN105608086B (zh) | 分布式数据库系统的事务处理方法及装置 | |
Levandoski et al. | Deuteronomy: Transaction support for cloud data | |
CN106415538B (zh) | 使用共享文件访问-rest接口的文件服务 | |
Sovran et al. | Transactional storage for geo-replicated systems | |
US8560889B2 (en) | Adding scalability and fault tolerance to generic finite state machine frameworks for use in automated incident management of cloud computing infrastructures | |
JP2023546249A (ja) | トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム | |
US20210271663A1 (en) | Method and system for supporting data consistency on an active standby database after dml redirection to a primary database | |
CN109710388A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
CN102193991B (zh) | 基于oltp的数据修改方法、系统及图形数据库服务器 | |
JP2023509035A (ja) | トランザクション処理方法、装置、コンピュータデバイス及びコンピュータプログラム | |
Pleisch et al. | Approaches to fault-tolerant and transactional mobile agent execution---an algorithmic view | |
CN111241589A (zh) | 一种数据库系统、节点和方法 | |
US7454761B1 (en) | Method and apparatus for correlating output of distributed processes | |
CN111241590A (zh) | 一种数据库系统、节点和方法 | |
CN109783578A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
Thakkar et al. | Scaling blockchains using pipelined execution and sparse peers | |
CN112988897A (zh) | 系统升级场景下的数据双向同步方法及装置 | |
CN113506169B (zh) | 单元化分布式架构下的银行开户方法及系统 | |
CN110532069A (zh) | 一种分布式事务提交方法及装置 | |
Wang et al. | A middleware approach to synchronize transaction data to blockchain | |
CN113448493B (zh) | 用于备份数据的方法、电子设备和计算机可读介质 | |
CN111078669B (zh) | 基于名字解析树的处理方法、装置、设备及存储介质 | |
Zhang et al. | Remove-win: a design framework for conflict-free replicated data types | |
CN107992290B (zh) | 后台数据处理方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |