CN110839064A - 一种分布式系统执行脚本的方法及装置 - Google Patents
一种分布式系统执行脚本的方法及装置 Download PDFInfo
- Publication number
- CN110839064A CN110839064A CN201911017059.0A CN201911017059A CN110839064A CN 110839064 A CN110839064 A CN 110839064A CN 201911017059 A CN201911017059 A CN 201911017059A CN 110839064 A CN110839064 A CN 110839064A
- Authority
- CN
- China
- Prior art keywords
- node
- participant
- response
- coordinator
- request
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- 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/465—Distributed object oriented systems
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Abstract
本发明实施例公开了一种分布式系统执行脚本的方法,分布式系统包括协调者节点和参与者节点,所述方法包括,获取并解析脚本,所述脚本包括节点key值和操作命令;获取参与者节点的状态信息,所述状态信息包括节点key分布槽位信息;根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点,采用本发明能够实现在分布式系统中执行脚本,并且降低开发成本,提高效率。本发明还公开了相应的装置。
Description
技术领域
本发明涉及计算机数据库技术领域,具体涉及一种分布式系统执行脚本的方法及装置。
背景技术
如今的计算机数据库技术领域中,会使用Redis内存数据库技术,同时,Lua脚本是一种开发成本较低的脚本语言,可以将一段逻辑用脚本的方式组合在一起,可以解决Redis不具备原子性的问题。
但是,如今的技术中,Redis开源项目仅支持单分片的Lua脚本命令,在很多业务场景中,需要采用分片的Redis集群,非单点模式。分片Redis集群执行Lua脚本存在不准确和不一致等问题。因此迫切需要一种可以在分布式系统环境下执行Lua脚本的方法。
发明内容
本发明的实施例提供一种分布式系统执行脚本的方法,用于在分布式环境下,执行脚本命令,完成操作。
为达到上述目的,本发明的实施例采用如下技术方案:
依据本发明的一个方面,本发明的实施例提供一种分布式系统执行脚本的方法,所述分布式系统包括协调者节点和参与者节点,所述方法包括:
获取并解析脚本,所述脚本包括节点key值和操作命令;
获取参与者节点的状态信息,所述状态信息包括节点key分布槽位信息;
根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点。
可选的,所述根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点,具体包括:
所述协调者节点向所述参与者节点发送状态询问请求,收到所述参与者节点响应后,向所述参与者节点发送预提交请求;
所述参与者节点接收所述预提交请求,执行预提交操作,并记录undo信息,同时向所述协调者节点返回响应;
所述协调者节点接收所述响应后,向所有参与者节点发送执行提交请求;
所述参与者节点接收所述执行提交请求后,执行事务提交,同时向所述协调者节点返回事务完成响应。
可选的,所述协调者节点向所述参与者节点发送状态询问请求,收到所述参与者节点响应后,向所述参与者节点发送预提交请求,具体包括:
所述协调者节点向所述参与者节点发送状态询问请求,所述参与者节点接收所述状态询问请求后,根据自身状态,向所述协调者节点作出回复响应;当状态良好时,则回复响应为YES响应,当状态异常或不在线时,则回复响应为NO响应;
若所述协调者节点接收的回复响应均为YES响应,则向所述参与者节点发送预提交请求。
可选的,若所述协调者节点接收的回复响应中包含至少一个NO响应,则执行事务的中断,所述协调者节点向所有的参与者节点发送中止请求,所述参与者节点接收所述中止请求后,执行事务中断。
可选的,所述参与者节点接收所述预提交请求,执行预提交操作,并记录undo信息,同时向所述协调者节点返回响应之后,还包括:
若所述协调者节点没有接收到所述响应,则向所有参与者节点发送中止请求;
所述参与者节点接收所述中止请求之后,利用所述undo信息,执行事务的回滚,并在完成回滚之后,释放所有的事务资源,并向所述协调者节点发送响应;
所述协调者节点接收所述参与者节点反馈的响应之后,执行事务中断。
依据本发明的另一个方面,本发明的实施例提供一种分布式系统执行脚本的装置,分布式系统包括协调者节点和参与者节点,所述装置包括:
解析模块,用于获取并解析脚本,所述脚本包括节点key值和操作命令;
获取模块,用于获取参与者节点的状态信息,所述状态信息包括节点key分布槽位信息;
发送模块,根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点。
可选的,所述发送模块还包括:
询问子模块,用于所述协调者节点向所述参与者节点发送状态询问请求,收到所述参与者节点响应后,向所述参与者节点发送预提交请求;
预提交子模块,用于所述参与者节点接收所述预提交请求,执行预提交操作,并记录undo信息,同时向所述协调者节点返回响应;
发送子模块,用于所述协调者节点接收所述响应后,向所有参与者节点发送执行提交请求;
执行子模块,用于所述参与者节点接收所述执行提交请求后,执行事务提交,同时向所述协调者节点返回事务完成响应。
可选的,所述询问子模块,还包括:
第一判断单元,用于所述协调者节点向所述参与者节点发送状态询问请求,所述参与者节点接收所述状态询问请求后,根据自身状态,向所述协调者节点作出回复响应;当状态良好时,则回复响应为YES响应,当状态异常或不在线时,则回复响应为NO响应;
若所述协调者节点接收的回复响应均为YES响应,则向所述参与者节点发送预提交请求。
可选的,所述第一判断单元,还包括:
第一中断子单元,用于若所述协调者节点接收的回复响应中包含至少一个NO响应,则执行事务的中断,所述协调者节点向所有的参与者节点发送中止请求,所述参与者节点接收所述中止请求后,执行事务中断。
可选的,所述发送模块还包括:
第二判断子模块,用于若所述协调者节点没有接收到所述响应,则向所有参与者节点发送中止请求;
回滚子模块,用于所述参与者节点接收所述中止请求之后,利用所述undo信息,执行事务的回滚,并在完成回滚之后,释放所有的事务资源,并向所述协调者节点发送响应;
第二中断子模块,用于所述协调者节点接收所述参与者节点反馈的响应之后,执行事务中断。
本发明实施例提供的一种分布式系统执行脚本的方法及装置,解决了在分布式环境中无法准确执行脚本命令的问题。相比于现有技术,在本发明实施中,通过设置协调者节点和参与者节点,实现了获取并解析脚本命令后,在分布式系统中,成功执行各操作命令,并且能够保证数据的一致性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例的交互时序图;
图2为本发明实施例的系统框架图;
图3为本发明实施例的流程图;
图4为本发明实施例的装置结构框图。
具体实施方式
为使本领域技术人员更好地理解本发明的技术方案,下面结合附图和具体实施方式对本发明作进一步详细描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的提前下所获得的实施例,都应属于本发明保护的范围。
由现在技术中的描述可知,现有技术,Redis开源项目仅支持单分片的Lua脚本命令。但是,在很多业务场景中,需要采用分片的Redis集群,非单点模式。为解决该技术问题,本发明实施例提供了一种分布式系统执行脚本的方法,图1和图2分别示出了根据本发明一个实施例的分布式系统执行脚本的时序交互图和系统框架图。
本发明是方法可以运行在如图2所示的系统框架中。如图2所示,该系统包括客户端、Redis分布式系统和ZOOKEEPER服务器。
客户端用户发送Redis操作命令。Redis分布式系统中包括协调者节点和参与者节点。Redis分布式系统用于内存数据库,使用Redis来存储数据,同时各个节点根据命令,来执行各类操作,完成业务场景需要的工作。
ZOOKEEPER服务器用于接收并存储参与者节点实时发送过来的状态信息,同时,ZOOKEEPER服务器还用于与协调者节点进行交互,在协调者节点提出需求时,将参与者节点上传的状态信息发送给协调者节点。
如图2所示,客户端用户通过编写lua脚本下发Redis操作命令,协调者节点收到脚本后解析并分解出了各个操作所需要的参与者节点,同时向ZOOKEEPER服务器上报状态机器信息,ZOOKEEPER服务器将参与者节点发送过来的状态槽位信息和机器信息转发给协调者节点,协调者节点根据各个槽位信息,将操作命令下发给参与者节点,参与者节点收到后执行操作,从而完成整个过程。
图3示出了根据本发明一个实施例的分布式系统执行脚本的处理流程图。参见图3,分布式系统执行脚本的方法包括步骤S301至步骤S303。
步骤S301,获取并解析脚本。
步骤S302,获取参与者节点的状态信息。
步骤S303,根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点。
本发明实施例中,通过设置参与者节点和协调者节点,并且根据分阶段执行的方法,将脚本命令解析,根据节点状态信息,将命令发送给各个节点执行,从而完成在分布式系统中执行脚本命令的操作。
需要说明的是,此分布式系统中,协调者节点也可存在多个,使系统具备高可用,其他节点都作为参与者节点。节点之间可以进行网络通信,各个节点都应具有中断事务的功能。
其中,步骤S301中,获取并解析的脚本。在本发明实施例中,脚本为lua脚本。脚本包括节点key值和操作命令。key值可以通过CRC16算法得出key对应的一个数值,是用于得到key所在的节点,找到key所在的参与者节点。协调者节点收到Lua脚本信息,解析lua脚本,分解成多个执行命令,以及命令上下文逻辑信息。采用现有的方式进行解析脚本。
其中,步骤S302中,所述状态信息包括节点key分布槽位信息、节点ip信息和节点状态。状态信息由参与者节点实时将自身状态上传至zookeeper服务器,协调者节点从zookeeper服务器中获取参与者节点的状态、槽位信息。
其中,步骤S303中,所述根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点,具体包括:
S3031所述协调者节点向所述参与者节点发送状态询问请求,收到所述参与者节点响应后,向所述参与者节点发送预提交请求。
S3032所述参与者节点接收所述预提交请求,执行预提交操作,并记录undo信息,同时向所述协调者节点返回响应。
S3033所述协调者节点接收所述响应后,向所有参与者节点发送执行提交请求。
S3034所述参与者节点接收所述执行提交请求后,执行事务提交,同时向所述协调者节点返回事务完成响应。
需要说明的是,参与者节点记录undo信息,就是将undo信息写入日志文件,undo日志用于存放数据修改被修改前的值,如果这个修改出现异常,可以使用undo日志来实现回滚操作,保证事务的一致性。
其中,所述步骤S3031具体包括:
所述协调者节点向所述参与者节点发送状态询问请求,所述参与者节点接收所述状态询问请求后,根据自身状态,向所述协调者节点作出回复响应;当状态良好时,则回复响应为YES响应,当状态异常或不在线时,则回复响应为NO响应;
若所述协调者节点接收的回复响应均为YES响应,则向所述参与者节点发送预提交请求。
进一步来说,若所述协调者节点接收的回复响应中包含至少一个NO响应,则执行事务的中断,所述协调者节点向所有的参与者节点发送中止请求,所述参与者节点接收所述中止请求后,执行事务中断。
优选的,所述步骤S3032之后,还包括:
若所述协调者节点没有接收到所述响应,则向所有参与者节点发送中止请求;
所述参与者节点接收所述中止请求之后,利用所述undo信息,执行事务的回滚,并在完成回滚之后,释放所有的事务资源,并向所述协调者节点发送响应;
所述协调者节点接收所述参与者节点反馈的响应之后,执行事务中断。
图1示出了根据本发明一个实施例的分布式系统执行脚本的时序交互图。如图1所示,包括Redis客户端、协调者节点和参与者节点。Redis客户端执行lua脚本。协调者节点解析脚本后,分解各个命令以及命令之间的逻辑关系,然后,协调者节点向参与者节点询问状态。参与者节点收到询问后,进行响应。
其中,若参与者响应失败或者响应超时,协调者节点就判断为参与者节点状态无法执行脚本命令,中断命令的执行。此时Redis客户端执行lua脚本失败。
然后,若所有参与者节点都响应成功,协调者节点就判断可以执行脚本命令,从而执行预提交阶段。协调者节点依据CRC16算法,得到各个命令中key所在的参与者节点,将命令依次发送给参与者节点执行。参与者节点收到命令后,先将key当前的值记录,并写入到undo日志,完成后响应yes给协调者节点。
其中,若协调者节点没有收到参与者节点的响应,则判断此时响应失败或超时,协调者节点中断命令的执行。此时Redis客户端执行lua脚本失败。
然后,若协调者节点收到了所有参与者节点返回的响应,则执行最终提交命令。协调者依次将Redis命令发送给参与者节点,参与者节点收到命令后,执行所述的Redis命令,执行成功后返回响应。协调者节点收到响应后,将下一条命令发送给参与者节点。当这个lua脚本所携带的所有的Redis命令完成后,协调者向客户端发送执行成功的响应。此时,Redis客户端执行lua脚本成功。
其中,若存在某个参与者节点无响应或者响应失败,则协调者节点判断此命令执行失败,需要进行回滚,按照命令的上下文逻辑关系,将回滚的指令发送给参与者节点。参与者节点从undo日志中找到记录的值,进行回滚操作。
采用本发明实施例提供的一种分布式系统执行脚本的方法能够达到如下有益效果:解决了在分布式环境中无法准确执行脚本命令的问题。相比于现有技术,在本发明实施中,通过设置协调者节点和参与者节点,实现了获取并解析脚本命令后,在分布式系统中,成功执行各操作命令。通过分阶段的命令与响应,同时,让参与者节点在过程中记录信息,在响应失败时进行回滚操作,从而保证了上下数据的一致性。同时,根据业务逻辑,可以使用并编写lua脚本,lua脚本相比redis API,节省了操作,将本来一个一个的逻辑进行整合,交给协调者节点调度并分割执行。这样进行开发,成本变得更低,并且效率也变得更高。
基于同一发明构思,本发明实施例还提供了一种分布式系统执行脚本的装置,图1和图2分别示出了根据本发明一个实施例的分布式系统执行脚本的时序交互图和系统框架图,图4提供了根据本发明一个实施例的分布式系统执行脚本的装置的结构框图。参见图4,分布式系统执行脚本的装置中至少包括有解析模块1000、获取模块2000和发送模块3000。现对分布式系统执行脚本的装置的组成部件以及各部件的功能进行具体说明。
解析模块1000,用于获取并解析脚本;
获取模块2000,用于获取参与者节点的状态信息;
发送模块3000,根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点。
本发明实施例中,通过设置参与者节点和协调者节点,并且根据分阶段执行的方法,将脚本命令解析,根据节点状态信息,将命令发送给各个节点执行,从而完成在分布式系统中执行脚本命令的操作。
需要说明的是,此分布式系统中,协调者节点也可存在多个,使系统具备高可用,其他节点都作为参与者节点。且节点之间可以进行网络通信,各个节点都应具有中断事务的功能。
其中,解析模块1000获取并解析的脚本,在本发明实施例中,为lua脚本,脚本中包括节点key值和操作命令,key值可以通过CRC16算法得出key对应的一个数值,是用于得到key所在的节点,找到key所在的参与者节点。协调者收到Lua脚本信息,解析lua脚本,分解成多个执行命令,以及命令上下文逻辑信息,采用现有的方式进行解析脚本。
然后,获取模块2000获取的状态信息包括节点key分布槽位信息、节点ip信息和节点状态,状态信息由参与者节点实时将自身状态上传至zookeeper服务器,协调者节点从zookeeper服务器中获取参与者节点的状态、槽位信息。
然后,所述发送模块3000包括:
询问子模块3100,用于所述协调者节点向所述参与者节点发送状态询问请求,收到所述参与者节点响应后,向所述参与者节点发送预提交请求;
预提交子模块3200,用于所述参与者节点接收所述预提交请求,执行预提交操作,并记录undo信息,同时向所述协调者节点返回响应;
发送子模块3300,用于所述协调者节点接收所述响应后,向所有参与者节点发送执行提交请求;
执行子模块3400,用于所述参与者节点接收所述执行提交请求后,执行事务提交,同时向所述协调者节点返回事务完成响应。
需要说明的是,参与者节点记录undo信息,就是将undo信息写入日志文件,undo日志用于存放数据修改被修改前的值,如果这个修改出现异常,可以使用undo日志来实现回滚操作,保证事务的一致性。
其中,所述询问子模块3100,还包括:
第一判断单元3110,用于所述协调者节点向所述参与者节点发送状态询问请求,所述参与者节点接收所述状态询问请求后,根据自身状态,向所述协调者节点作出回复响应;当状态良好时,则回复响应为YES响应,当状态异常或不在线时,则回复响应为NO响应;
若所述协调者节点接收的回复响应均为YES响应,则向所述参与者节点发送预提交请求。
进一步来说,所述第一判断单元3110,还包括:
第一中断子单元3111,用于若所述协调者节点接收的回复响应中包含至少一个NO响应,则执行事务的中断,所述协调者节点向所有的参与者节点发送中止请求,所述参与者节点接收所述中止请求后,执行事务中断。
另外,所述发送模块,还包括:
第二判断子模块3500,用于若所述协调者节点没有接收到所述响应,则向所有参与者节点发送中止请求;
回滚子模块3600,用于所述参与者节点接收所述中止请求之后,利用所述undo信息,执行事务的回滚,并在完成回滚之后,释放所有的事务资源,并向所述协调者节点发送响应;
第二中断子模块3700,用于所述协调者节点接收所述参与者节点反馈的响应之后,执行事务中断。
具体实施过程中,有一些业务场景,比如库存增减,总库存、分库存数据不一致的问题。使用传统的redis操作,很难保证数据的一致性。总库存、分库存属于两个原子操作,要保证最终结果的正确性,总库存、分库存必须整体具备原子性。lua脚本将几个命令归为一个原子操作,能够保证数据一致性,分布式环境下,基于Lua脚本原子性特点,也可以保证事务执行的一致性。
同时,lua脚本相对于redis API,开发成本更低。正常redis实现业务逻辑,需要结合底层API组合成一个逻辑,且不具备原子性,在高并发场景下,容易造成数据不一致,对开发者思考的问题较多。Lua脚本将一段逻辑用脚本的方式组合在一起,具备原子性,通过Redis脚本执行命令发送给协调者统一调度命令执行。相比前者开发效率更高,对业务的支撑更好。
采用本发明实施例提供的一种分布式系统执行脚本的装置能够达到如下有益效果:解决了在分布式环境中无法准确执行脚本命令的问题。相比于现有技术,在本发明实施中,通过设置协调者节点和参与者节点,实现了获取并解析脚本命令后,在分布式系统中,成功执行各操作命令。通过分阶段的命令与响应,同时,让参与者节点在过程中记录信息,在响应失败时进行回滚操作,从而保证了上下数据的一致性。同时,根据业务逻辑,可以使用并编写lua脚本,lua脚本相比redis API,节省了操作,将本来一个一个的逻辑进行整合,交给协调者节点调度并分割执行。这样进行开发,成本变得更低,并且效率也变得更高。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (10)
1.一种分布式系统执行脚本的方法,其特征在于,所述分布式系统包括协调者节点和参与者节点,所述方法包括:
获取并解析脚本,所述脚本包括节点key值和操作命令;
获取参与者节点的状态信息,所述状态信息包括节点key分布槽位信息;
根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点。
2.按照权利要求1所述的方法,其特征在于,所述根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点,具体包括:
所述协调者节点向所述参与者节点发送状态询问请求,收到所述参与者节点响应后,向所述参与者节点发送预提交请求;
所述参与者节点接收所述预提交请求,执行预提交操作,并记录undo信息,同时向所述协调者节点返回响应;
所述协调者节点接收所述响应后,向所有参与者节点发送执行提交请求;
所述参与者节点接收所述执行提交请求后,执行事务提交,同时向所述协调者节点返回事务完成响应。
3.按照权利要求2所述的方法,其特征在于,所述协调者节点向所述参与者节点发送状态询问请求,收到所述参与者节点响应后,向所述参与者节点发送预提交请求,具体包括:
所述协调者节点向所述参与者节点发送状态询问请求,所述参与者节点接收所述状态询问请求后,根据自身状态,向所述协调者节点作出回复响应;当状态良好时,则回复响应为YES响应,当状态异常或不在线时,则回复响应为NO响应;
若所述协调者节点接收的回复响应均为YES响应,则向所述参与者节点发送预提交请求。
4.按照权利要求3所述的方法,其特征在于,还包括:若所述协调者节点接收的回复响应中包含至少一个NO响应,则执行事务的中断,所述协调者节点向所有的参与者节点发送中止请求,所述参与者节点接收所述中止请求后,执行事务中断。
5.按照权利要求2所述的方法,其特征在于,所述参与者节点接收所述预提交请求,执行预提交操作,并记录undo信息,同时向所述协调者节点返回响应之后,还包括:
若所述协调者节点没有接收到所述响应,则向所有参与者节点发送中止请求;
所述参与者节点接收所述中止请求之后,利用所述undo信息,执行事务的回滚,并在完成回滚之后,释放所有的事务资源,并向所述协调者节点发送响应;
所述协调者节点接收所述参与者节点反馈的响应之后,执行事务中断。
6.一种分布式系统执行脚本的装置,其特征在于,分布式系统包括协调者节点和参与者节点,所述装置包括:
解析模块,用于获取并解析脚本,所述脚本包括节点key值和操作命令;
获取模块,用于获取参与者节点的状态信息,所述状态信息包括节点key分布槽位信息;
发送模块,根据所述节点key值和所述节点key分布槽位信息,发送所述操作命令给参与者节点。
7.根据权利要求6所述的装置,其特征在于,所述发送模块包括:
询问子模块,用于所述协调者节点向所述参与者节点发送状态询问请求,收到所述参与者节点响应后,向所述参与者节点发送预提交请求;
预提交子模块,用于所述参与者节点接收所述预提交请求,执行预提交操作,并记录undo信息,同时向所述协调者节点返回响应;
发送子模块,用于所述协调者节点接收所述响应后,向所有参与者节点发送执行提交请求;
执行子模块,用于所述参与者节点接收所述执行提交请求后,执行事务提交,同时向所述协调者节点返回事务完成响应。
8.根据权利要求7所述的装置,其特征在于,所述询问子模块,还包括:
第一判断单元,用于所述协调者节点向所述参与者节点发送状态询问请求,所述参与者节点接收所述状态询问请求后,根据自身状态,向所述协调者节点作出回复响应;当状态良好时,则回复响应为YES响应,当状态异常或不在线时,则回复响应为NO响应;
若所述协调者节点接收的回复响应均为YES响应,则向所述参与者节点发送预提交请求。
9.根据权利要求8所述的装置,其特征在于,所述第一判断单元,还包括:
第一中断子单元,用于若所述协调者节点接收的回复响应中包含至少一个NO响应,则执行事务的中断,所述协调者节点向所有的参与者节点发送中止请求,所述参与者节点接收所述中止请求后,执行事务中断。
10.根据权利要求7所述的装置,其特征在于,所述发送模块还包括:
第二判断子模块,用于若所述协调者节点没有接收到所述响应,则向所有参与者节点发送中止请求;
回滚子模块,用于所述参与者节点接收所述中止请求之后,利用所述undo信息,执行事务的回滚,并在完成回滚之后,释放所有的事务资源,并向所述协调者节点发送响应;
第二中断子模块,用于所述协调者节点接收所述参与者节点反馈的响应之后,执行事务中断。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911017059.0A CN110839064A (zh) | 2019-10-24 | 2019-10-24 | 一种分布式系统执行脚本的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911017059.0A CN110839064A (zh) | 2019-10-24 | 2019-10-24 | 一种分布式系统执行脚本的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110839064A true CN110839064A (zh) | 2020-02-25 |
Family
ID=69575526
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911017059.0A Pending CN110839064A (zh) | 2019-10-24 | 2019-10-24 | 一种分布式系统执行脚本的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110839064A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112667600A (zh) * | 2020-12-28 | 2021-04-16 | 紫光云技术有限公司 | 一种redis与MySQL结合的库存解决方法 |
CN113573171A (zh) * | 2021-07-14 | 2021-10-29 | 国能日新科技股份有限公司 | 遥控遥调方法、装置及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160188749A1 (en) * | 2014-12-31 | 2016-06-30 | Alibaba Group Holding Limited | Feed Data Storage and Query |
CN107609156A (zh) * | 2017-09-26 | 2018-01-19 | 微梦创科网络科技(中国)有限公司 | 一种页面搭建的方法及装置 |
CN108416039A (zh) * | 2018-03-14 | 2018-08-17 | 北京思特奇信息技术股份有限公司 | 一种数据查询方法和系统 |
-
2019
- 2019-10-24 CN CN201911017059.0A patent/CN110839064A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160188749A1 (en) * | 2014-12-31 | 2016-06-30 | Alibaba Group Holding Limited | Feed Data Storage and Query |
CN107609156A (zh) * | 2017-09-26 | 2018-01-19 | 微梦创科网络科技(中国)有限公司 | 一种页面搭建的方法及装置 |
CN108416039A (zh) * | 2018-03-14 | 2018-08-17 | 北京思特奇信息技术股份有限公司 | 一种数据查询方法和系统 |
Non-Patent Citations (2)
Title |
---|
可均可可: ""Redis进阶实践之十九 Redis如何使用lua脚本"", 《HTTPS://WWW.CNBLOGS.COM/PATRICKLIU/P/8656675.HTML》 * |
追着蜗牛打: ""分布式两阶段提交和三阶段提交"", 《HTTPS://BLOG.CSDN.NET/U010191243/ARTICLE/DETAILS/52081891》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112667600A (zh) * | 2020-12-28 | 2021-04-16 | 紫光云技术有限公司 | 一种redis与MySQL结合的库存解决方法 |
CN113573171A (zh) * | 2021-07-14 | 2021-10-29 | 国能日新科技股份有限公司 | 遥控遥调方法、装置及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108076098B (zh) | 一种业务处理方法及系统 | |
US20190026193A1 (en) | Method and apparatus for executing data recovery operation | |
KR102072726B1 (ko) | 데이터베이스로의 미들-티어 트랜잭션 로그들의 인라인 위임을 지원하는 시스템들 및 방법들 | |
US9779128B2 (en) | System and method for massively parallel processing database | |
CN104809202B (zh) | 一种数据库同步的方法和装置 | |
CN106598992B (zh) | 数据库的操作方法及装置 | |
CN113396407A (zh) | 用于利用区块链技术扩充数据库应用的系统和方法 | |
US11169898B2 (en) | System and method for database replication benchmark testing using a pipeline-based microservices model | |
CN105359147A (zh) | 在线数据库迁移 | |
CN104885054A (zh) | 大规模并行处理数据库中执行事务的系统和方法 | |
US11836154B2 (en) | Data synchronization method and device for databases, and storage medium | |
US20220229822A1 (en) | Data processing method and device for distributed database, storage medium, and electronic device | |
CN110427427B (zh) | 一种通过引脚桥接实现全局事务分布式处理方法 | |
US20180300147A1 (en) | Database Operating Method and Apparatus | |
CN113157710B (zh) | 区块链数据并行写入方法、装置、计算机设备及存储介质 | |
CN110839064A (zh) | 一种分布式系统执行脚本的方法及装置 | |
CN113722277A (zh) | 一种数据导入方法、装置、服务平台及存储介质 | |
CN114003644A (zh) | 分布式事务处理方法、设备、介质和数据库系统 | |
US8719316B2 (en) | Write agent delayed write to data stores | |
CN112596801A (zh) | 事务处理方法、装置、设备、存储介质、数据库 | |
WO2023111910A1 (en) | Rolling back database transaction | |
CN114116325A (zh) | 配置一致性检查装置及方法 | |
CN112749156A (zh) | 数据处理方法、数据库管理系统和数据处理设备 | |
JP6171494B2 (ja) | 情報処理装置、処理要求プログラム、および処理要求方法 | |
CN115658805B (zh) | 一种事务一致性管理引擎及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200225 |