一种集群环境下的定时任务处理方法、装置及存储介质与流程

文档序号:18463952发布日期:2019-08-17 02:17阅读:170来源:国知局
一种集群环境下的定时任务处理方法、装置及存储介质与流程

本申请涉及计算机技术领域,特别涉及一种集群环境下的定时任务处理方法、装置及存储介质。



背景技术:

定时任务目前已经广泛应用于软件设计的很多场景中,例如银行的财务系统需要定时进行对账等操作。虽然利用单机完成定时任务具有很好的任务调度能力,但已经逐渐不能满足企业的业务需求,如可用性及可缩放性,并且,如果需要故障转移的能力,集群相比于单机有着明显的优势。

目前,为了实现集群环境下的定时任务,通常采用quartz框架,通过创建quartz数据库表,并在数据库表中存储任务信息、触发器、调度器、集群节点等信息,将任务调度状态序列化到数据库中,从而保证集群中不会出现任务多次被调度执行的情况。

在实施本申请的过程中,发明人发现现有技术中至少存在以下问题:

在现有方法中,需要依赖数据库资源来保证集群中只有一个节点执行定时任务,因此,现有技术中,在节点集群中新增或删减节点时,需要在数据库中更新节点集群的信息,进而重启集群节点中其他节点的定时任务的问题。



技术实现要素:

本申请实施例的目的是提供一种集群环境下的定时任务处理方法、装置及存储介质,以解决现有技术中,在节点集群中新增或删减节点时,需要在数据库中更新节点集群的信息,进而重启集群节点中其他节点的定时任务的问题。

为达到上述目的,本申请实施例提供一种集群环境下的定时任务处理方法,所述方法包括:

接收多个节点同步发送的时间戳写入请求;所述时间戳写入请求中携带有目标时间戳,所述多个节点为同一节点集群中的节点;

判断是否预先存储有所述目标时间戳;

若未预先存储所述目标时间戳,则根据预设的分布式一致性算法,从所述多个节点中选取一个节点作为目标节点;

创建独占锁,并向所述目标节点分配所述独占锁。

优选的,在向所述目标节点分配所述独占锁之后,还包括:

在所述独占锁对应的文件中,写入所述目标时间戳以及所述目标节点的节点标识。

优选的,所述方法还包括:

若预先存储所述目标时间戳,则断开与所述多个节点的连接。

本申请还提供一种集群环境下的定时任务处理装置,所述装置包括:

接收模块,用于接收多个节点同步发送的时间戳写入请求;所述时间戳写入请求中携带有目标时间戳,所述多个节点为同一节点集群中的节点;

判断模块,用于判断是否预先存储有所述目标时间戳;

目标节点选取模块,用于若未预先存储所述目标时间戳,则根据预设的分布式一致性算法,从所述多个节点中选取一个节点作为目标节点;

独占锁分配模块,用于创建独占锁,并向所述目标节点分配所述独占锁。

本申请还提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

接收多个节点同步发送的时间戳写入请求;所述时间戳写入请求中携带有目标时间戳,所述多个节点为同一节点集群中的节点;

判断是否预先存储有所述目标时间戳;

若未预先存储所述目标时间戳,则根据预设的分布式一致性算法,从所述多个节点中选取一个节点作为目标节点;

创建独占锁,并向所述目标节点分配所述独占锁。

本申请还提供一种集群环境下的定时任务处理方法,应用于节点集群中的任一节点,包括:

在定时任务被触发时,向分布式协调组件集群发送携带有目标时间戳的时间戳写入请求,以使所述分布式协调组件集群在确认自身未存储所述目标时间戳时,根据预设的分布式一致性算法,从所述节点集群的多个节点中选取一个节点并向其分配独占锁;

在收到所述分布式协调组件集群分配的独占锁时,执行所述定时任务。

优选的,所述在定时任务被触发时,向分布式协调组件集群发送携带有目标时间戳的时间戳写入请求,包括:

在定时任务被触发时,与所述分布式协调组件集群中的任意一个分布式协调组件建立连接;

调用所述分布式协调组件的写入时间戳接口,发送携带有目标时间戳的时间戳写入请求。

优选的,所述方法还包括:

若未收到所述分布式协调组件集群分配的独占锁,则断开与所述分布式协调组件集群的连接。

本申请还提供另一种集群环境下的定时任务处理装置,所述装置包括:

发送模块,用于在定时任务被触发时,向分布式协调组件集群发送携带有目标时间戳的时间戳写入请求,以使所述分布式协调组件集群在确认自身未存储所述目标时间戳时,根据预设的分布式一致性算法,从节点集群的多个节点中选取一个节点并向其分配独占锁;

定时任务执行模块,用于在收到所述分布式协调组件集群分配的独占锁时,执行所述定时任务。

本申请还提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

在定时任务被触发时,向分布式协调组件集群发送携带有目标时间戳的时间戳写入请求,以使所述分布式协调组件集群在确认自身未存储所述目标时间戳时,根据预设的分布式一致性算法,从节点集群的多个节点中选取一个节点并向其分配独占锁;

在收到所述分布式协调组件集群分配的独占锁时,执行所述定时任务。

在本申请中,提供了一种集群环境下的定时任务处理方法,通过接收多个节点发送的时间戳写入请求,所述时间戳写入请求中携带有目标时间戳;所述多个节点为同一节点集群中的节点;判断是否预先存储有所述目标时间戳;若未预先存储所述目标时间戳,根据预设的分布式一致性算法,从所述多个节点中选取目标节点;创建独占锁,并向所述目标节点分配所述独占锁,从而利用分布式协调组件的独占锁机制,解决了现有技术中,在节点集群中新增或删减节点时,需要在数据库中更新节点信息,进而中断正在执行的定时任务的技术问题。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种集群环境下的定时任务系统的架构示意图;

图2是本申请实施例提供的一种集群环境下的定时任务处理方法的流程图;

图3是本申请实施例提供的一种集群环境下的定时任务处理装置的模块结构示意图;

图4是本申请实施例提供的另一种集群环境下的定时任务处理方法的流程图;

图5是本申请实施例提供的另一种集群环境下的定时任务处理装置的模块结构示意图。

具体实施方式

本申请实施方式提供一种集群环境下的定时任务执行方法、装置及存储介质。

为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施方式中的附图,对本申请实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本申请一部分实施方式,而不是全部的实施方式。基于本申请中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都应当属于本申请保护的范围。

目前,在项目开发的过程中,常常使用定时器来完成定时任务,但是如果将项目部署在集群环境下,在到达指定的定时时间时,集群中的多个节点可能会同时执行预设的定时任务,造成重复数据或者程序异常等问题。为了解决上述问题,在现有技术中,通常在数据库建立多张数据库表,每次执行定时任务的时候,从数据库表中读取记录,只有读取到的记录标识当前任务状态为未执行时,才会触发定时任务,并且更新数据库状态,利用mysql数据库的表锁和行锁,实现同一时刻只能有一个事务操作,并可以保证仅执行一次。类似的,若利用quartz框架来搭建集群环境下的定时器,也需要配置11张数据库表。可以看出,在现有技术中,集群环境下的定时任务都依赖数据库资源,从而避免定时任务的重复执行,由于需要配置多张数据库表,工作量较大,较为复杂。进一步的,在节点集群中新增或删减节点时,还需要在数据库中更新节点集群的信息,进而重启集群节点中其他节点的定时任务。为了解决上述问题,本发明提供了如下的技术方案。

图1是一示例性实施例提供的一种集群环境下的定时任务系统的架构示意图。如图1所示,该系统可以包括分布式协调组件集群,比如分布式协调组件1、分布式协调组件2、分布式协调组件3、部署有定时任务的集群,比如节点1、节点2、节点3、节点4、节点5、节点6、以及报文渠道系统等。

具体的,分布式协调组件集群是用于使分布式进程通过一种类似于一种标准文件系统的、共享的、层次化的命名空间进行相互协调的集群应用,例如zookeeper,当搭建了一个分布式协调组件集群后,会根据预设的选举算法,从多个分布式协调组件中选取一个作为leader服务器,剩余的分布式协调组件作为follower服务器,leader服务器作为请求的唯一调度和处理者,follower服务器用于处理非事务请求,并转发事务请求给leader服务器。

图2是本申请提供的一种集群环境下的定时任务处理方法的流程图。如图2所示,该方法应用于分布式协调组件集群,可以包括以下步骤:

s101:接收多个节点发送的时间戳写入请求,所述时间戳写入请求中携带有目标时间戳,所述多个节点为同一节点集群中的节点。

部署有定时任务的多个节点,在触发时间点,同时向分布式协调组件集群发送时间戳写入请求,其中,触发时间点预先在各个节点的应用程序的配置文件中写明。每个节点通过socket协议随机选择分布式协调组件集群中的一个分布式协调组件,建立socket连接通信。定时任务调用分布式协调组件的写入时间戳接口,接收来自节点的写入时间戳请求。

s102:判断是否预先存储有所述目标时间戳。

分布式协调组件会在文文本件中记录写入的时间戳,从而记录已经执行过的定时任务,当接收到节点的写入时间戳请求后,读取预先保存的文本文件,并在记录的文本文件中查找是否存在与目标时间戳相同的时间戳,从而避免定时任务被重复执行。

分布式协调组件集群中的各个分布式协调组件之间,都互相保持着通信,从而可以实现数据的同步,进而使分布式协调组件集群中的每个分布式协调组件中都保存有写入过的所有时间戳。

s103:若未预先存储所述目标时间戳,根据预设的分布式一致性算法,从所述多个节点中选取目标节点。

当未预先存储所述目标时间戳时,根据预设的分布式一致性算法,从发送时间戳写入请求的多个节点中选取一个节点,作为目标节点。

具体的,分布式一致性算法,以paxos算法为例,该算法执行过程共分两个阶段:

s10:准备阶段:

分布式协调组件集群中的leader服务器,选择一个序列号x以及值v来创建一个提议p1(x,v),该提议是分布式协调组件集群中的其他服务器接收到的来自集群节点的时间戳写入请求,以及包括leader服务器本身接收的请求。leader服务器将这个提议发送给分布式协调组件集群中的其余分布式协调组件,并等待超过半数的分布式协调组件的返回信息。

分布式协调组件集群中的其余分布式协调组件在收到提议p1(x,v)后,判断:如果提议是该分布式协调组件要接受的第一个提议,返回“同意”,并承诺leader服务器未来不会接受小于序列号x的请求。如果该分布式协调组件之前有接受过提议,则比较x和之前接受的最高序列号的提议,比如p2(y,v2),如果x<y,返回“拒绝”以及y值,如果x>y,返回“同意”和p2(y,v2)

s20:接受阶段:

如果超过半数的分布式协调组件返回“拒绝”或者没有回复,leader服务器取消本次提议。如果超过半数的分布式协调组件返回“同意”,leader服务器也能知道已经接受的提议。leader服务器从这些值中任选一个值(如果没有值被接受,选择自己的值),发送“接受请求”消息,带着提议的序列号和值(x,v)。分布式协调组件集群中的其他分布式协调组件收到“接受请求”消息,如果满足下面的两个条件,就发送“接受”,否则返回“拒绝”,v和之前接受的某个值相同,x是所接受提议中序列号的最大值,如果leader服务器没有从超过半数分布式协调组件处收到“接受”消息,leader服务器取消这次提议然后重新开始;如果leader服务器收到了超过半数分布式协调组件的“接受”消息,本次协商结束。作为优化,leader服务器可以发送“提交”消息给其他的分布式协调组件。最后达成共识后,时间戳写入请求即可被分布式协调组件集群中的各个分布式协调组件接受,并获得独占锁,进而将该时间戳写入分布式协调组件集群中的各个分布式协调组件的文件系统中。

在一些实施方式中,当预先存储有所述目标时间戳时,则退出该定时任务并关闭节点与分布式协调组件集群的连接。

s104:创建独占锁,并向所述目标节点分配所述独占锁。

若分布式协调组件集群中,未预先存储所述目标时间戳,则创建独占锁,在/exclusive_lock节点下创建子节点,/exclusive_lock/lock,并将目标节点的节点标识和目标时间戳写入该独占锁所对应的文件中,具体的,节点标识可以是节点的ip地址。

目标节点所执行的定时任务可以是定时发送报文任务,目标节点获取独占锁后,扫描未发送的报文并推送报文至报文渠道系统。具体的,在金融业务中,该报文可以是swift(societyforworldwideinterbankfinancialtelecommunications)报文,银行通过接收和发送swift报文,以实现各个银行之间的数据交换。

如图3所示,本申请还提供一种集群环境下的定时任务处理装置,所述装置包括接收模块、判断模块200、目标节点选取模块300、独占锁分配模块400。

接收模块100,用于接收多个节点发送的时间戳写入请求,所述多个节点用于执行同一定时任务,所述时间戳写入请求中携带有目标时间戳;

判断模块200,用于判断是否预先存储有所述目标时间戳;

目标节点选取模块300,用于若未预先存储所述目标时间戳,根据预设的分布式一致性算法,从所述多个节点中选取目标节点;

独占锁分配模块400,用于创建独占锁,并在所述独占锁对应的文件中,写入所述目标时间戳以及所述目标节点的标识,以使所述目标客户端获取所述独占锁,并执行定时任务。

本申请还提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

接收多个节点发送的时间戳写入请求,所述多个节点用于执行同一定时任务,所述时间戳写入请求中携带有目标时间戳;

判断是否预先存储有所述目标时间戳;

若未预先存储所述目标时间戳,根据预设的分布式一致性算法,从所述多个节点中选取目标节点;

创建独占锁,并在所述独占锁对应的文件中,写入所述目标时间戳以及所述目标节点的标识,以使所述目标客户端获取所述独占锁,并执行定时任务。

图4是本申请提供的另一种集群环境下的定时任务处理方法的流程图。如图4所示,该方法应用于节点集群,具体可以包括以下步骤:

s201:在定时任务被触发时,向分布式协调组件集群发送携带有目标时间戳的时间戳写入请求,以使所述分布式协调组件集群在确认自身未存储所述目标时间戳时,根据预设的分布式一致性算法,从所述节点集群的多个节点中选取一个节点并向其分配独占锁。

具体的,在节点的定时任务被触发时,每个节点与所述分布式协调组件集群中的任意一个分布式协调组件建立socket连接;并调用所述分布式协调组件的写入时间戳接口,从而发送携带有目标时间戳的时间戳写入请求。

当分布式协调组件集群未预先存储所述目标时间戳时,根据预设的分布式一致性算法,比如,可以是paxos算法,从发送时间戳写入请求的多个节点中选取一个节点,作为目标节点,并在/exclusive_lock节点下创建子节点,/exclusive_lock/lock。

s202:在收到所述分布式协调组件集群分配的独占锁时,执行所述定时任务。

在节点收到所述分布式协调组件集群分配的独占锁时,分布式协调组件将该节点的节点标识和目标时间戳写入该独占锁所对应的文件中,具体的,节点标识可以是节点的ip地址。

若节点未收到所述分布式协调组件集群分配的独占锁,则断开与所述分布式协调组件集群的连接。

目标节点所执行的定时任务可以是定时发送报文任务,目标节点获取独占锁后,扫描未发送的报文并推送报文至报文渠道系统。具体的,在金融业务中,该报文可以是swift(societyforworldwideinterbankfinancialtelecommunications)报文,银行通过接收和发送swift报文,以实现各个银行之间的数据交换。

如图5所示,本申请还提供另一种集群环境下的定时任务处理装置,所述装置包括发送模块110、定时任务执行模块210。

发送模块110,用于在定时任务被触发时,向分布式协调组件集群发送携带有目标时间戳的时间戳写入请求,以使所述分布式协调组件集群在确认自身未存储所述目标时间戳时,根据预设的分布式一致性算法,从节点集群的多个节点中选取一个节点并向其分配独占锁;

定时任务执行模块210,用于在收到所述分布式协调组件集群分配的独占锁时,执行所述定时任务。

本申请还提供另一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

在定时任务被触发时,向分布式协调组件集群发送携带有目标时间戳的时间戳写入请求,以使所述分布式协调组件集群在确认自身未存储所述目标时间戳时,根据预设的分布式一致性算法,从节点集群的多个节点中选取一个节点并向其分配独占锁;

在收到所述分布式协调组件集群分配的独占锁时,执行所述定时任务。

可以看出,本申请实现了如下技术效果:通过利用分布式协调组件的独占锁机制,在保证节点集群中只有一个节点完成定时任务的同时,不需要依赖数据库资源,从而提高了实施的便捷性,进一步的,在节点集群中新增或删减节点时,不需要重启定时任务,从而提高了定时任务处理的实时性。再者,集群节点中的各个节点之间,不再需要相互通信,定时任务的触发也更为独立,各个节点之间不会相互影响,即使某个节点中止工作也不会影响定时任务的执行。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

上述实施例阐明的装置、模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。该计算机软件产品可以包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。该计算机软件产品可以存储在内存中,内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括短暂电脑可读媒体(transitorymedia),如调制的数据信号和载波。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。

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