一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种事务处理方法及系统与流程

2022-06-05 10:40:36 来源:中国专利 TAG:


1.本发明实施例涉及计算机技术领域,尤其涉及一种事务处理方法及系统。


背景技术:

2.分布式数据库需要保证事务的acid特性,其中的a即原子性以及d即持久性通常由两阶段提交协议或其变体来实现。两阶段提交是一种确保分布式数据库中的事务的原子性和持久性的一种算法。
3.两阶段提交包括第一阶段和第二阶段,第一阶段为提交请求阶段,包括:协调者向所有参与者节点询问是否可以执行提交操作,并等待各参与者节点的响应。第二阶段为提交执行阶段,包括:当协调者节点从所有参与者节点获得的响应消息都为“同意”时,协调者节点向所有参与者节点发出“正式提交”的请求,协调者节点收到所有参与者节点反馈的“完成”消息后,完成事务;如果任一参与者节点返回给协调者节点的响应消息为“终止”,或者协调者节点在第一阶段的询问超时之前无法获取所有参与者节点的响应消息时,协调者节点向所有参与者节点发出“回滚操作”的请求,协调者节点收到所有参与者节点反馈的“回滚完成”消息后,取消事务。
4.上述两阶段提交存在单点故障、数据不一致、极限情况下对某一事务的不确定性等问题,这些问题会导致分布式事务的原子性和持久性受影响。


技术实现要素:

5.本发明提供了一种事务处理方法及系统,以解决现有的两阶段提交过程在特定状态下存在发生单点故障、数据不一致、对事务状态不确定等问题。
6.根据本发明的一方面,提供了一种事务处理方法,包括:
7.在分布式锁服务中完成协调者服务的注册;
8.在通过有效的数据库会话执行sql的过程中,基于注册过程中得到的协调者的编号生成事务身份标识号;
9.基于所述事务身份标识号开启新事务;
10.基于xa协议以及创建的提交里程碑表进行所述新事物的提交。
11.根据本发明的另一方面,提供了一种事务处理系统,包括:
12.至少一个协调者服务、分布式锁服务以及至少一个子数据库,所述分布式锁服务分别与所述至少一个协调者服务通信连接,每个协调者服务分别与所述至少一个子数据库通信连接;
13.所述一个或多个协调者服务用于在所述分布式锁服务中完成协调者服务的注册;
14.所述一个或多个协调者服务还用于基于注册过程中得到的协调者的编号生成事务身份标识号;
15.所述一个或多个协调者服务还用于基于所述事务身份标识号开启新事务;
16.所述一个或多个协调者服务还用于基于xa协议以及创建的提交里程表进行所述
新事物的提交;
17.所述一个或多个子数据库用于在接收到所述协调者服务发送的xa协议的正式提交请求后,执行事务的正式提交操作;
18.所述一个或多个子数据库还用于在接收到所述协调者服务发送的xa协议的回滚请求后,执行事务的回滚操作。
19.根据本发明的另一方面,提供了一种协调者服务设备,所述协调者服务设备包括:至少一个处理器;以及
20.与所述至少一个处理器通信连接的存储器;其中,
21.所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的事务处理方法
22.根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机
23.可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的事务处理方法。
24.本发明实施例的技术方案,首先在分布式锁服务中完成协调者服务的注册;然后在通过有效的数据库会话执行sql的过程中,基于注册过程中得到的协调者的编号生成事务身份标识号;之后基于所述事务身份标识号开启新事务;最后基于xa协议以及创建的提交里程碑表进行所述新事物的提交,解决了现有的两阶段提交过程在特定状态下存在发生单点故障、数据不一致、对事务状态不确定等问题,取到了在分布式系统中有效进行事务提交的有益效果。
25.应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
26.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
27.图1为本发明实施例一所提供的一种事务处理方法的流程示意图;
28.图2为本发明实施例一所提供的一种事务处理方法中的协调者注册控制器的工作流程图;
29.图3为本发明实施例一所提供的一种事务处理方法中的新事务提交流程示意图;
30.图4为本发明实施例二所提供的一种事务处理方法的流程示意图;
31.图5为本发明实施例二所提供的一种事务处理方法中的故障恢复的流程示意图;
32.图6为本发明实施例三所提供的一种事务处理系统的结构示意图;
33.图7为本发明实施例三所提供的一种事务处理系统工作的结构示意图;
34.图8为本发明实施例三所提供的另一种事务处理系统的结构示意图;
35.图9为本发明实施例的事务处理方法的协调者服务设备的结构示意图。
具体实施方式
36.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。应当理解,本发明的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本发明的范围在此方面不受限制。
37.本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
38.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
39.需要注意,本发明中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
40.本发明实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
41.此处需要对两阶段提交过程中出现的单点故障、数据不一致以及极限情况下对某一事务的不确定性问题进行进一步的解释说明。其中,当第一阶段完成,第二阶段进行时,若协调者发生宕机,那么所有未收到“正式提交”或“回滚操作”的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作,此时会导致单点故障;第二阶段进行时,当协调者向参与者发送正式提交请求之后,发生了局部网络异常或者在发送正式提交请求过程中协调者发生了故障,这会导致只有一部分参与者接受到了正式提交请求,而在这部分参与者接到正式提交请求之后就会执行正式提交操作,但是其他部分未接到正式提交请求的机器则无法执行事务提交,于是整个分布式系统便出现了数据不一致性的现象;协调者在发出第一条正式提交请求之后宕机,而唯一接收到这条消息的参与者同时也宕机,那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,无法知晓该事务是否被已经提交,此种情况即为极限情况下对某一事务的不确定性。
42.实施例一
43.图1为本发明实施例一所提供的一种事务处理方法的流程示意图,该方法可适用于通过分布式系统进行事务处理的情况,该方法可以由分布式系统执行。
44.如图1所示,本发明实施例一提供的一种事务处理方法,包括如下步骤:
45.s110、在分布式锁服务中完成协调者服务的注册。
46.其中,本步骤是在系统进行二阶段提交之前执行,当协调者服务启动时,在分布式锁服务中完成协调者服务的注册。在系统中,一个分布式锁服务可以与多个协调者服务进行通信连接。
47.其中,分布式锁服务可以为一种可以提供分布式锁功能的服务,分布式锁服务可以为chubby、zookeeper、etcd等。
48.在本实施例中,可以通过分布式锁服务中提供的临时节点完成协调者服务的注册。此处,还可以通过其他任意方法实现协调者服务的注册,此处对协调者服务注册的实现方式不做具体限制。
49.进一步的,所述在分布式锁服务中完成协调者服务的注册,包括:在当前协调者服务启动后,通过所述当前协调者服务中的协调者注册控制器,基于分布式锁服务获取当前协调者的编号,并在所述分布式锁服务中创建代表所述当前协调者的记录。
50.在一个实施例中,每个协调者服务都可以包括一个协调者注册控制器和协调者主模块,当前协调者服务的注册可以通过当前协调者服务中的协调者注册控制器实现。
51.其中,在分布式锁服务中维护的结构可以包括互斥锁mutex、计数器counter以及存活节点列表alivelist。
52.在本实施例中,在当前协调者服务启动后,可以通过分布式锁服务中的互斥锁、计数器以及存活节点列表以及分布式锁服务提供的临时节点功能完成当前协调者服务的注册。
53.进一步的,通过所述当前协调者服务中的协调者注册控制器,基于分布式锁服务获取当前协调者的编号,并在所述分布式锁服务中创建代表所述当前协调者的记录,包括:通过所述当前协调者服务中的协调者注册控制器确定所述当前协调者服务中的协调者主模块正常工作后,若分布式锁服务未创建所述当前协调者服务对应的临时节点或已创建的所述当前协调者服务对应的临时节点未处于有效状态,则在获取所述分布式锁服务中的互斥锁后,将所述分布式锁服务中的计数器加1,将增加后的计数器个数作为当前协调者的编号;通过所述协调者注册控制器在所述分布式锁服务中的存活节点列表中创建所述当前协调者服务对应的临时节点,所述临时节点保存的是所述当前协调者的编号以及所述当前协调者的连接方式;通过所述协调者注册控制器释放所述互斥锁,将所述协调者注册控制器睡眠预设数值个临时节点租约超时后,继续检查所述协调者主模块是否正常工作。
54.其中,预设数值可以为预先设置的数值,预设数值可以为小于或等于1/3的任意数值,示例性的,预设数值可以为1/3,1/4,1/5。在预设数值个临时节点租约超时的时间范围内,临时节点具有有效性,在此时间范围内,协调者注册控制器可以保持睡眠状态,以减少协调者注册控制器的工作量。其中,协调者注册控制器处于睡眠状态表征协调者注册控制器停止工作。
55.示例性的,图2为本发明实施例一所提供的一种事务处理方法中的协调者注册控制器的工作流程图,如图2所示,协调者服务启动后,协调者注册控制器可以一直运行如下流程:检查协调者主模块的工作状态,确定工作状态是否正常,若不正常,则删除临时节点;若正常,则确定是否已创建临时节点并处于有效状态,若是,则续约临时节点,睡眠1/3个临时节点租约超时后返回到检查协调者主模块的工作状态的步骤;若否,则获得分布式锁服务中的互斥锁mutex,增加计数器counter=counter 1,将增加后的结果作为当前协调者的
编号coordid,在存活节点列表中创建临时节点,释放互斥锁mutex,睡眠1/3个临时节点租约超时后继续返回检查协调者主模块的工作状态的步骤。
56.需要说明的是,协调者注册控制器在存活节点列表中创建的是临时节点,客户端必须不停续约临时节点,如果最近一次续约到现在已过去的时间超过了租约超时,分布式锁服务可以自动删除该临时节点。因此如果某一个协调者服务发生宕机,其对应的临时节点将会被自动清除。
57.还需要说明的是,由于同时只能有一个服务获得互斥锁mutex,不同协调者服务获得的编号coordid是按获得编号的时间进行递增且不重复的。某一个协调者服务宕机后重新启动或发生故障后重新注册,该协调者服务的编号也必须重新获取,与之前的协调者服务可看作不同的协调者服务。
58.s120、在通过有效的数据库会话执行sql的过程中,基于注册过程中得到的协调者的编号生成事务身份标识号。
59.在本实施例中,在得到有效的数据库会话之前,需要创建数据库会话并检查数据库会话是否有效。数据库会话基于协调者服务注册过程中的存活节点列表中的临时节点创建。其中,创建数据库会话,检查数据库会话是否有效以及通过有效的数据库会话执行sql属于数据库驱动程序的会话管理,由数据库驱动程序执行。
60.其中,数据库会话的创建过程包括:选取所述存活节点列表中的一个临时节点作为目标节点;读取所述目标节点中的协调者的编号以及协调者的连接方式;根据所述连接方式创建连接到所述协调者的数据库会话。
61.示例性的,数据库会话的创建过程包括如下步骤:步骤1、业务程序可以通过数据库驱动程序的api接口连接分布式锁服务,随机选取分布式锁服务中的存活节点列表中的一个临时节点,将该临时节点记作nodex;步骤2、读取nodex中的协调者的编号和连接方式;步骤3、创建连接到该协调者的会话。
62.进一步的,在创建数据库会话之后,还包括:将会话对象加入到关系图,所述关系图维护协调者的编号与会话的关系,一个协调者对应一个包含多个数据库会话的列表;确定所述协调者的数据库会话是否有效。
63.其中,关系图coordsessionmap可以由驱动程序维护,示例性的,coordsessionmap的数据结构为:
64.map《coordid,list《dbsession》》coordsessionmap
65.进一步的,所述确定所述协调者的数据库会话是否有效,包括:通过分布式锁服务的监测接口监听所述目标节点;当监听到所述目标节点被删除后,则确定所述协调者的数据库会话无效,通过驱动程序遍历所述关系图中的所述目标节点对应的协调者下的列表,将所述列表中的数据库会话设置为无效状态。
66.示例性的,数据库会话创建成功后将处于有效状态,通过分布式锁服务的watch接口可以监听nodex,当nodex被删除后会自动回调。nodex被删除说明对应的协调者服务发生故障,驱动程序需要遍历coordsessionmap中相应协调者下的列表,将其中的数据库会话对象置为无效状态。
67.在本实施例中,业务程序可以通过有效的数据库会话执行sql,可以通过驱动程序将业务程序的sql转发到数据库会话对应的协调者。
68.其中,通过有效的数据库会话执行sql可以包括事务的开启,业务程序通过执行begin以请求协调者服务开启新的事务,协调者服务接收到事务开启请求后需要产生事务身份标识号。其中,事务身份标识号基于注册过程中得到的协调者的编号生成,
69.进一步的,基于注册过程中得到的协调者的编号生成事务身份标识号,包括:在接收到业务程序发送的事务开启请求后,将基于注册过程中得到的协调者的编号与协调者本地事务身份标识号的拼接结果作为事务身份标识号。
70.示例性的,事务id(gtrid)的长度为96bits(12bytes)格式如下:[32bits协调者编号,64bits协调者本地事务id]。
[0071]
s130、基于所述事务身份标识号开启新事务。
[0072]
其中,新事务可以理解为分布式事务,新事务还可以理解为新事务可以为子数据库对应的子事务。
[0073]
在本实施例中,根据事务身份标识号可以确定该事务通过哪个协调者开启。
[0074]
进一步的,所述基于所述事务身份标识号开启新事务,包括:通过所述事务身份标识号对应的协调者,向所有子数据库发送xa协议的开始指令,以开启新事务。
[0075]
其中,xa协议是一种使用两阶段提交来保证所有资源同时提交或回滚任何特定的事务的协议,市面上的常见数据库如mysql都支持xa协议。但是,xa协议描述的是两阶段提交中全局的事务管理器与局部的资源管理器之间的接口,并没有对具体实现进行约束。
[0076]
示例性的,协调者服务接收到事务开启请求后可以执行如下操作:产生事务id,向所有子数据库发送xa begin《gtrid》指令,开启子事务,向业务程序返回成功响应。
[0077]
s140、基于xa协议以及创建的提交里程碑表进行所述新事物的提交。
[0078]
其中,在新事务的提交过程中需要维护一张提交里程碑表,如表1所示。
[0079]
表1一种提交里程碑表
[0080]
字段类型约束gtridbinary(12)primary key
[0081]
其中,提交里程碑表的不同记录可以根据gtrid的hash值横向切分,保存在多个子数据库中。
[0082]
在本实施例中,当业务程序执行提交语句,请求提交新事务,协调者将执行新事务的提交。
[0083]
其中,基于xa协议可以理解为协调者向所有子数据库发送的请求都是xa协议的请求,可以包括xa协议的提交请求、xa协议的正式提交操作请求、xa协议的回滚操作请求。
[0084]
在本实施例中,基于xa协议以及创建的提交里程碑表进行所述新事物的提交与二阶段提交的区别在于:协调者发送的请求都是xa协议的请求;将参与者同意提交的事务插入提交里程碑表中。
[0085]
具体的,所述基于xa协议以及创建的提交里程碑表进行所述新事物的提交,包括:接收到所述业务程序发送的提交请求后,通过协调者服务向所有子数据库发送xa协议的提交请求;若所有子数据库返回的响应结果都为同意提交,则在创建的提交里程表中记录所述新事物,并向所有子数据库发送xa协议的正式提交操作请求,以使得所有子数据库完成所述新事物的提交;若存在子数据返回的响应消息为不同意提交,则向所有子数据库发送xa协议的回滚操作请求。
[0086]
需要说明的是,某一个新事务是应该全部执行提交还是执行全部回滚,取决于协调者是否在提交里程碑表中写入了对应的记录。无论是由协调者自身完成,还是由恢复者接管完成,若提交里程碑表中写入了对应的记录,则新事务应该全部提交,否则应该全部回滚。于此,解决了数据一致性问题。
[0087]
示例性的,图3为本发明实施例一所提供的一种事务处理方法中的新事务提交流程示意图,如图3所示,协调者执行的新事务提交流程包括:向所有子数据库发送xa prepare《gtrid》即xa协议的提交请求,等待所有子数据库返回prepare结果,判断所有子数据库是否返回prepare成功,即所有子数据库返回的响应结果是否都为同意提交;若否,则向所有子数据库发送xa rollback《gtrid》即xa协议的回滚操作请求;若是,则在提交里程碑表中插入当前事务的记录,向所有子数据库发送xa commit《gtrid》即xa协议的正式提交操作请求。
[0088]
本发明实施例一提供的一种事务处理方法,首先在分布式锁服务中完成协调者服务的注册;然后在通过有效的数据库会话执行sql的过程中,基于注册过程中得到的协调者的编号生成事务身份标识号;之后基于所述事务身份标识号开启新事务;最终基于xa协议以及创建的提交里程碑表进行所述新事物的提交。上述方法通过完成协调者服务的注册可以解决单点故障问题,通过创建的提交里程碑表可以解决数据一致性问题。
[0089]
实施例二
[0090]
图4为本发明实施例二所提供的一种事务处理方法的流程示意图,本实施例二在上述各实施例的基础上进行优化。在本实施例中,在实施例一方案的基础上引入恢复者服务,执行故障恢复。本实施例尚未详尽的内容请参考实施例一。
[0091]
如图4所示,本发明实施例二提供的一种事务处理方法,包括如下步骤:
[0092]
s210、在分布式锁服务中完成协调者服务的注册。
[0093]
s220、在通过有效的数据库会话执行sql的过程中,基于注册过程中得到的协调者的编号生成事务身份标识号。
[0094]
s230、基于所述事务身份标识号开启新事务。
[0095]
s240、基于xa协议以及创建的提交里程碑表进行所述新事物的提交。
[0096]
s250、通过恢复者服务,基于所述协调者服务的注册、xa协议以及所述提交里程碑表完成故障恢复。
[0097]
在本实施例中,当协调者服务宕机后,可以通过恢复者服务将协调者未处理完的子事务进行处理。可以通过定时唤醒机制定时唤醒恢复者,以使恢复者执行故障恢复。
[0098]
其中,基于协调者服务的注册过程得到的协调者的编号、计数器个数和存活结点列表,xa协议的命令和xa协议的请求以及提交里程碑表可以完成故障修复。进一步的,通过恢复者服务,基于所述协调者服务的注册、xa协议以及所述提交里程碑表完成故障恢复,包括:遍历所有子数据库,获取所有子数据库中的未处理子事务,所述未处理子事务通过执行xa协议的恢复命令从各子数据库上的未处理子事务列表中获取;解析所述未处理子事务所属的全局事务身份标识,并获取所述未处理子事务对应的协调者的编号;根据计数器个数和存活节点列表确定所述未处理子事务对应的协调者的编号所对应的协调者是否宕机;若否,则不对所述未处理子事务执行操作;若是,且确定所述提交里程表中存在所述未处理子事务对应的全局事务,则执行xa协议的正式提交请求;若是,且确定所述提交里程表中不存
在所述未处理子事务对应的全局事务,则执行xa协议的回滚请求。
[0099]
其中,执行xa协议的恢复命令,子数据库可以返回其上的未处理子事务列表,未处理子事务为已执行xa协议的提交请求成功,但还没有执行xa协议的正式提交操作和xa协议的事务回滚操作的子事务。未处理子事务列表中每条记录包含子事务所属的全局事务id(gtrid)等信息。
[0100]
其中,根据计数器个数和存活节点列表确定所述未处理子事务对应的协调者的编号所对应的协调者是否宕机的原理为:由于协调者的编号必然是递增的,如果一个协调者的编号小于计数器个数,但在存活节点列表中又没有该协调者对应的临时节点,则表明该协调者的编号对应的协调者已宕机。
[0101]
示例性的,图5为本发明实施例二所提供的一种事务处理方法中的故障恢复的流程示意图,如图5所示,恢复者可以执行以下流程:从分布式锁服务中读取counter变量即计数器个数、activelist存活列表即存活节点列表,遍历每一个子数据库,在遍历到每一个子数据库时,执行xa recover命令即xa协议的恢复命令,获取该子数据库上的未决的子事务列表即未处理的子事务列表,遍历未决的子事务列表中的每一个未决的子事务即未处理子事务,解析其所属的全局事务id(gtrid),获取负责执行该未决子事务的协调者编号coordid,根据counter变量和activelist存活列表判断coordid对应的协调者是否已宕机,若未宕机,则暂时不处理该未处理子事务;若已宕机,则继续判断提交里程碑表中是否存在该未决子事务对应的全局事务,若否,则执行xa rollback回滚该未决的子事务;若是,则执行xa commit提交该未决的子事务,继续判断是否已遍历完当前子数据库的所有未决的子事务,若是,则遍历下一个子数据库,返回到执行xa recover命令的步骤;若否,则遍历下一个未决的子事务。
[0102]
本发明实施例二提供的一种事务处理方法,具体化了故障恢复的过程。利用该方法,能够通过恢复者服务继续执行协调者服务未处理完的子事务,有效解决极限情况下对某一事务的不确定性。
[0103]
实施例三
[0104]
图6为本发明实施例三所提供的一种事务处理系统的结构示意图,该系统可适用于进行事务处理的情况,其中,该事务处理系统可由软件和硬件实现,该系统可以用于执行本发明任意实施例所述的事务处理方法。
[0105]
如图6所示,本发明实施例三提供的一种事务处理系统,包括:
[0106]
一个或多个协调者服务110、分布式锁服务120以及一个或多个子数据库130;
[0107]
分布式锁服务120分别与至少一个协调者服务通110信连接,每个协调者服务110分别与至少一个子数据库130通信连接;
[0108]
一个或多个协调者服务110用于在分布式锁服务120中完成协调者服务的注册;
[0109]
一个或多个协调者服务110还用于基于注册过程中得到的协调者的编号生成事务身份标识号;
[0110]
一个或多个协调者服务110还用于基于所述事务身份标识号开启新事务;
[0111]
一个或多个协调者服务110还用于基于xa协议以及创建的提交里程表进行所述新事物的提交;
[0112]
一个或多个子数据库130用于在接收到协调者服务110发送的xa协议的正式提交
请求后,执行事务的正式提交操作;
[0113]
一个或多个子数据库130还用于在接收到所述协调者服务发送的xa协议的回滚请求后,执行事务的回滚操作。
[0114]
其中,分布式锁服务120可以分别与多个协调者服务110通信,一个协调者服务110可以与至少一个子数据库130通信。
[0115]
其中,子数据库130可以作为二阶段提交中的参与者,所有的子数据库130需要支持xa协议。子数据库130需要开启数据容灾功能,并且对xa事务的处理过程也拥有完整的容灾。例如mysql 8.0以上版本,其开启半同步复制的模式下,xa事务的xa prepare、xa commit、xa rollback等事件必须正确同步到备机后,主机才会返回客户端命令响应,保证在发生主备切换等情况下,未决的xa子事务还能继续被解决。
[0116]
在本实施例中,协调者服务110可以包括协调者主模块111和协调者注册控制器112。协调者主模块111用于实现两阶段提交,协调者注册控制器112用于通过分布式锁服务120获取当前协调者的编号,并在分布式锁服务120中创建代表所述当前协调者的记录。
[0117]
进一步的,协调者注册控制器具体用于确定协调者主模块正常工作后,若分布式锁服务120未创建当前协调者服务对应的临时节点或已创建的当前协调者服务对应的临时节点未处于有效状态,则在获取分布式锁服务120中的互斥锁后,将分布式锁服务120中的计数器加1,将增加后的计数器个数作为当前协调者的编号;在分布式锁服务120中的存活节点列表中创建当前协调者服务对应的临时节点,所述临时节点保存的是当前协调者的编号以及当前协调者的连接方式;释放所述互斥锁,睡眠预设数值个临时节点租约超时后,继续检查协调者主模块是否正常工作。
[0118]
图7为本发明实施例三所提供的一种事务处理系统工作的结构示意图,如图7所示,数据库驱动程序分别与分布式锁服务以及多个协调者服务相连。数据库驱动程序会暴露api接口供业务程序调用。
[0119]
其中,数据库驱动程序创建数据库会话的过程包括:选取所述存活节点列表中的一个临时节点作为目标节点;读取所述目标节点中的协调者的编号以及协调者的连接方式;根据所述连接方式创建连接到所述协调者的数据库会话。
[0120]
进一步的,数据库驱动程序创建数据库会话的过程还包括:将会话对象加入到关系图,所述关系图维护协调者的编号与会话的关系,一个协调者对应一个包含多个数据库会话的列表;确定所述协调者的数据库会话是否有效。
[0121]
其中,确定所述协调者的数据库会话是否有效,包括:通过分布式锁服务的监测接口监听所述目标节点;当监听到所述目标节点被删除后,则确定所述协调者的数据库会话无效,通过驱动程序遍历所述关系图中的所述目标节点对应的协调者下的列表,将所述列表中的数据库会话设置为无效状态。
[0122]
在本实施例中,业务程序可以通过创建的数据库会话执行sql,驱动程序可以将业务程序的sql转发到会话对应的协调者服务。
[0123]
进一步的,协调者服务具体用于在接收到业务程序发送的事务开启请求后,将基于注册过程中得到的协调者的编号与协调者本地事务身份标识号的拼接结果作为事务身份标识号;
[0124]
进一步的,协调者服务还用于通过所述事务身份标识号对应的协调者,向所有子
数据库发送xa协议的开始指令,以开启新事务,所述新事务为子数据库对应的子事务。
[0125]
进一步的,基于xa协议以及创建的提交里程碑表进行所述新事物的提交,包括:接收到所述业务程序发送的提交请求后,通过协调者服务向所有子数据库发送xa协议的提交请求;若所有子数据库返回的响应结果都为同意提交,则在创建的提交里程表中记录所述新事物,并向所有子数据库发送xa协议的正式提交操作请求,以使得所有子数据库完成所述新事物的提交;若存在子数据返回的响应消息为不同意提交,则向所有子数据库发送xa协议的回滚操作请求。
[0126]
本发明实施例三提供的一种事务处理系统,通过完成协调者服务的注册可以解决单点故障问题,通过创建的提交里程碑表可以解决数据一致性问题。
[0127]
进一步的,图8为本发明实施例三所提供的另一种事务处理系统的结构示意图,如图8所示,该系统还包括恢复者服务140,恢复者服务140分别与分布式锁服务120以及至少一个子数据库130通信相连;恢复者服务140用于基于所述协调者服务的注册、xa协议以及所述提交里程碑表完成故障恢复。
[0128]
具体的,恢复者服务140具体用于遍历所有子数据库,获取所有子数据库130中的未处理子事务,所述未处理子事务通过执行xa协议的恢复命令从各子数据库上的未处理子事务列表中获取;解析所述未处理子事务所属的全局事务身份标识,并获取所述未处理子事务对应的协调者的编号;根据计数器个数和存活节点列表确定所述未处理子事务对应的协调者的编号所对应的协调者是否宕机;若否,则不对所述未处理子事务执行操作;若是,且确定所述提交里程表中存在所述未处理子事务对应的全局事务,则执行xa协议的正式提交请求;若是,且确定所述提交里程表中不存在所述未处理子事务对应的全局事务,则执行xa协议的回滚请求。
[0129]
协调者服务宕机后,该系统通过恢复者服务继续执行协调者服务未处理完的子事务,有效解决极限情况下对某一事务的不确定性。
[0130]
实施例四
[0131]
图9示出了可以用来实施本发明的实施例的协调者服务设备10的结构示意图。协调者服务设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。协调者服务设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
[0132]
如图9所示,协调者服务设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(rom)12、随机访问存储器(ram)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(rom)12中的计算机程序或者从存储单元18加载到随机访问存储器(ram)13中的计算机程序,来执行各种适当的动作和处理。在ram 13中,还可存储协调者服务设备10操作所需的各种程序和数据。处理器11、rom 12以及ram 13通过总线14彼此相连。输入/输出(i/o)接口15也连接至总线14。
[0133]
协调者服务设备10中的多个部件连接至i/o接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以
及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0134]
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如一种事务处理方法。
[0135]
在一些实施例中,事务处理方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由rom 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到ram 13并由处理器11执行时,可以执行上文描述的事务处理方法中的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行事务处理方法。
[0136]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0137]
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0138]
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0139]
为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且
可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0140]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)、区块链网络和互联网。
[0141]
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务中,存在的管理难度大,业务扩展性弱的缺陷。
[0142]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
[0143]
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献