分布式事务处理方法与流程

文档序号:12719060阅读:330来源:国知局
分布式事务处理方法与流程

本发明涉及数据处理技术,更具体地说,它涉及分布式事务处理方法。



背景技术:

SaaS平台是运营saas软件的平台。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。SaaS是一种软件布局模型,其应用专为网络交付而设计,便于用户通过互联网托管、部署及接入。

针对saas平台业务量大,需要把底层服务分别部署在多台服务器上,但是由于多台服务器之间并不会进行沟通,因此,又会产生事务的不一致性问题。



技术实现要素:

针对现有技术存在的不足,本发明的目的在于提供一种分布式事务处理方法,能够对事务进行快速处理,并且能够保证事务的一致性。

为实现上述目的,本发明提供了如下技术方案:

一种分布式事务处理方法,包括:

多个事务处理节点中的其中一个事务处理节点接收事务启动请求,并将与所述事务启动请求对应的事务划分为若干子事务;

所述其中一个事务处理节点执行预定的其中一个子事务,并将其余的子事务写入到本地数据库;

所述其中一个事务处理节点在执行完子事务后,查询本地数据库中的子事务,并将本地数据库中的子事务发布至消息队列,并在发布后从本地数据库中删除相应的子事务;

所述消息队列向其余的事务处理节点推送子事务,并在从其余的事务处理节点接收到成功标识后,从队列中删除相应的子事务;

所述其余的事务处理节点在接收到相应的子事务后,将子事务写入各自的本地数据库;

所述其余的事务处理节点从各自的本地数据库中获取并执行相应的子事务,并在执行完成后,从本地数据库中删除相应的子事务。

优选地,所述消息队列采用RabbitMQ消息队列。

优选地,所述其中一个事务处理节点在成功执行相应的子事务后,向消息队列发送确认消息;消息队列接收到确认消息后,消息队列向其余的事务处理节点推送子事务;所述其中一个事务处理节点在未成功执行相应的子事务时,向消息队列发送取消消息;消息队列接收到取消消息后,消息队列不向其余的事务处理节点推送子事务。

优选地,还包括:消息状态确认服务器查询消息队列中的子事务,若存在未确认或被取消的子事务,则查询所述其中一个事务处理节点中对应子事务的消息状态,若对应的消息状态已被确认,则向消息队列发送确认消息。

优选地,还包括:

所述其余事务处理节点在处理完相应的子事务后,将该子事务写入到各自的事务状态表;

当所述其余事务处理节点从消息队列接收到子事务时,查询该事务状态表,若已存在,则不将接收到的子事务写入到本地数据库;若不存在,则写入到本地数据库以待处理。

优选地,还包括:

所述其中一个事务处理节点在对事务进行划分时,从标识处理服务器获取包含有若干唯一标识的唯一标识串,并将其中的唯一标识一一对应地添加至每一子事务;当相应的事务处理节点在执行完相应的子事务后,将该唯一标识发送至标识处理服务器;

该标识处理服务器在发出唯一标识串的预定时间后,查询相应的唯一标识的接收状态;若存在至少一个唯一标识未被接收,则查询相应的事务处理节点,并根据查询结果进行相应的处理。

优选地,所述标识处理服务器记录查询结果,当在同一事务处理节点查询到唯一标识的次数超过预设值时,则将该事务处理节点的信息发送至监视服务器;所述监视服务器在接收到相应的信息后,从备用的事务处理节点库中调取相应的事务处理节点进行替换。

与现有技术相比,本发明的优点是:

1、每一事务处理节点仅在成功处理完相应的子事务后,再删除该事务,从而保证整个事务的一致性;

2、通过消息队列将各个子事务推送至相应的事务处理节点,一方面处理速度快,另一方面,能够保证各个事务处理节点能够准确地接收到子事务;

3、具有监视功能,通过监视服务器与标识处理服务器之间的配合,实现对各个事务处理节点的处理能力的监视,当某个事务处理节点频繁出现处理迟缓或失败的问题时,则从库中调取相应的事务处理节点进行替换,以保证事务处理的顺畅。

附图说明

图1为实施例1中分布式事务处理系统的系统框图;

图2为实施例2中分布式事务处理系统的系统框图;

图3为实施例3中分布式事务处理系统的系统框图;

图4为实施例4中分布式事务处理系统的系统框图。

具体实施方式

下面结合实施例及附图,对本发明作进一步的详细说明,但本发明的实施方式不仅限于此。

实施例1:

图1所示的分布式事务处理系统,包括若干事务处理节点和消息队列130,图中仅示出事务处理节点110、事务处理节点120,并以两者作为示例,对本系统的功能进行详细说明。其中,事务处理节点110配置有应用服务器111、数据库112以及事务处理服务器113,事务处理节点120配置有事务接收器121、本地数据库122以及事务处理服务器113。其余的事务处理节点与事务处理节点120的配置相同,因此不再赘述。

事务处理节点110中的应用服务器111在接收到事务启动请求后,将与事务启动请求对应的事务划分为若干子事务,并将子事务写入到本地数据库112;之后,事务处理服务器113执行预定的其中一个子事务(此子事务为整个事务中的首要任务),并将其余的子事务发布至消息队列130;消息队列130接收到子事务后,向事务处理服务器113返回成功标识,事务处理服务器113在接收到标识后,从本地数据库112中删除相应的子事务。

本实施例中该消息队列可采用RabbitQ消息队列,消息队列130接收到子事务后,向将子事务推送至事务处理节点120的事务接收服务器121,事务接收服务器121在成功接收到子事务后,向消息队列130返回成功标识;消息队列130接收到标识后,从队列中删除相应的子事务。事务接收服务器121将到子事务写入到本地数据库122;事务处理节点120的事务处理服务器123轮番地查询本地数据库122中的子事务,当查询到待执行的子事务时,执行该子事务。当事务处理服务器123成功处理完子事务后,则从本地数据库删除相应的子事务。

因此,本系统的整个事务处理流程可被总结为:

多个事务处理节点中的其中一个事务处理节点接收事务启动请求,并将与事务启动请求对应的事务划分为若干子事务;

其中一个事务处理节点执行预定的其中一个子事务,并将其余的子事务写入到本地数据库;

其中一个事务处理节点在执行完子事务后,查询本地数据库中的子事务,并将本地数据库中的子事务发布至消息队列,并在发布后从本地数据库中删除相应的子事务;

消息队列向其余的事务处理节点推送子事务,并在从其余的事务处理节点接收到成功标识后,从队列中删除相应的子事务;

其余的事务处理节点在接收到相应的子事务后,将子事务写入各自的本地数据库;

其余的事务处理节点从各自的本地数据库中获取并执行相应的子事务,并在执行完成后,从本地数据库中删除相应的子事务。

实施例2:

基于实施例1的一种分布式事务处理系统,其与实施例1的区别在于:当事务处理节点210中的事务处理服务器213在成功执行相应的子事务后,向消息队列230发送确认消息;消息队列230接收到确认消息后,向事务处理节点220推送子事务。当事务处理服务器213在未成功执行相应的子事务时,向消息队列230发送取消消息;消息队列接收到取消消息230后,则不向事务处理节点220推送子事务。

另外,为了避免事务处理服务器213未能正常地向消息队列230发送确认消息或取消消息,而导致消息队列230将子事务长期挂起,本系统还增设了消息状态确认服务器240,该消息状态确认服务器240被配置为用于查询消息队列中的子事务,若存在未确认或被取消的子事务,则查询事务处理服务器213中对应子事务的消息状态,若对应的消息状态已被确认,则向消息队列230发送确认消息。如此,通过设置消息状态确认服务器240,使得消息数据能够独立存储,降低事务处理与消息处理间的耦合,避免消息传送故障而导致事务不能被及时处理的情况出现。

实施例3:

基于实施例1或实施例2的一种分布式事务处理系统,其与实施例1的区别在于:本系统中,事务处理节点320增设了事务状态表324,该事务状态表324被配置为用于存储每一子事务的处理记录;具体是,事务处理节点320中的事务处理服务器323在处理完相应的子事务后,将该子事务写入到事务状态表324,从而在事务状态表324中生成相应的历史记录。如此,当事务接收服务器321从消息队列330接收到子事务时,查询该事务状态表324,若已存在相同地子事务,则不将接收到的子事务写入到本地数据库(但同样向消息队列330返回成功标识);若不存在,则写入到本地数据库以待处理。

实施例4:

基于实施例1或实施例2或实施例3的一种分布式事务处理系统,其与实施例1的区别在于:本系统还增设了标识处理服务器440,该标识处理服务器440配置有N个唯一标识串,每一个唯一标识串中均包含有若干唯一标识。事务处理节点410中的应用服务器411在对事务进行划分时,从标识处理服务器440获取该唯一标识串,并将其中的唯一标识一一对应地添加至每一子事务,添加完成后,再将被添加过唯一标识的子事务发送至标识处理服务器440进行记录。

当事务处理服务器413、事务处理服务器423在执行完相应的子事务后,获取对应子事务中所包含的唯一标识,并将该唯一标识发送至标识处理服务器440(发送时,为该唯一标识添加“已处理标记”)。该标识服务器在向应用服务器411发送该唯一标识串时,对该唯一标识串启动计时程序;并在计满预定时间后,查询相应的唯一标识的接收状态;若存在至少一个唯一标识未被接收,则查询所有的事务处理节点,作为示例,查询事务处理节点410、事务处理节点420。例如,先对事务处理节点420中的本地数据库422进行查询,若查询到该未被执行的子事务仍然滞留在本地数据库422中,则尝试向事务处理服务器423发送事务触发消息,以通知事务处理服务器423从本地数据库422获取子事务并执行。若未从本地数据库422中查询到子事务,则向被添加过唯一标识的子事务直接发送至事务接收服务器421,以再次写入到本地数据库422。如此,通过以上技术方案,能够避免子事务在处理过程中存在子事务处理中断或丢失的问题。

另外,本系统还配置有备用的事务处理节点库460,该备用的事务处理节点库460中包含有N个事务处理节点,处理能力事务处理节点420或其余的事务处理节点相同。同时,标识处理服务器440还被配置为记录查询结果,当在同一事务处理节点,例如事务处理节点420,查询到唯一标识的次数超过预设值时,则将该事务处理节点420的信息发送至监视服务器450;监视服务器450在接收到相应的信息后,从备用的事务处理节点库460中调取相应的事务处理节点进行替换。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1