任务处理方法及系统与流程

文档序号:11250731阅读:652来源:国知局
任务处理方法及系统与流程

本发明属于通信技术领域,尤其涉及一种任务处理方法及系统。



背景技术:

目前,消费信贷自助服务([cfs_ss],ss)系统为了防止定时任务(job)被多台服务器重复执行,通常会向数据库插入一条记录,比如,插入一个任务的过期时间。当服务器执行任务之前,会先到数据库查询该任务的过期时间是否有效,若有效,则表示有服务器在执行该任务,若无效则表明没有服务器在执行这个任务,即该任务可以执行。该方法的缺点是,当不同服务器的时间存在偏差时,可能会造成多个服务器同时执行同一个任务的情况,从而导致服务器出现故障。



技术实现要素:

有鉴于此,本发明实施例提供了任务处理方法及系统,以解决现有技术中的问题。

本发明实施例的第一方面提供了一种任务处理方法,包括:

在一个或多个服务器执行任务之前,向分布式应用程序协调服务zookeeper发送第一临时目录创建请求;

所述zookeeper选择一个服务器,向被选择的服务器发送包含同意创建第一临时目录的信息,所述被选择的服务器为第一服务器;

所述第一服务器在所述zookeeper创建一个与所述任务唯一对应的第一临时目录;

所述第一服务器执行所述第一临时目录对应的任务。

本发明实施例的第二方面提供了一种任务处理系统,包括:一个或多个服务器、zookeeper,其中,所述一个或多个服务器包括第一服务器;

所述一个或多个服务器用于在执行任务之前,向分布式应用程序协调服务zookeeper发送第一临时目录创建请求;

所述zookeeper用于选择一个服务器,向被选择的服务器发送包含同意创建第一临时目录的信息,所述被选择的服务器为第一服务器;

所述第一服务器用于在所述zookeeper创建一个与所述任务唯一对应的第一临时目录,并执行所述第一临时目录对应的任务。

本发明实施例与现有技术相比存在的有益效果是:由于只有一台服务器的任务会在zookeeper创建临时目录成功,且临时目录都是在zookeeper上创建,因此,服务器本身的时间存在偏差时也不会影响zookeeper的时间,从而保证同一个任务不会因为服务器本身的时间存在偏差而导致重复执行。

附图说明

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

图1是本发明实施例提供的一种任务处理方法的方法流程图;

图2是本发明实施例提供的一种任务处理系统的结构示意图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。

为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。

图1示出了本发明实施例提供的一种任务处理方法的方法流程图,详述如下:

步骤s11,在一个或多个服务器执行任务之前,向分布式应用程序协调服务zookeeper发送第一临时目录创建请求。

其中,zookeeper是一个分布式的、开放源码的分布式应用程序协调服务。

步骤s12,所述zookeeper选择一个服务器,向被选择的服务器发送包含同意创建第一临时目录的信息,所述被选择的服务器为第一服务器。

当只有一个服务器向zookeeper发送第一临时目录创建请求时,该zookeeper选择该服务器作为第一服务器,并同意所述第一服务器创建第一临时目录。

当有多个服务器向zookeeper发送第一临时目录创建请求时,zookeeper只会同意其中一个服务器创建第一临时目录。可选地,zookeeper根据接收到第一临时目录创建请求的先后顺序选择同意哪一个服务器创建第一临时目录,比如,只同意最先发送第一临时目录创建请求的服务器创建第一临时目录。当然,zookeeper也可根据服务器的优先权选择优先权最高的服务器创建第一临时目录。其中,服务器的优先权可根据服务器完成任务的情况设定,比如,统计一段时间内各个服务器完成任务的情况,若服务器能够完整完成一个任务而不出现故障,则该服务器对应的权值增大,当权值增大到一定值,则将该服务器的优先级提高一个等级。同理,若服务器在执行一个任务过程中出现故障而中断任务的执行,则减小该服务器对应的权重,当权值减小到一定值,则将该服务器的优先级降低一个等级。

步骤s13,所述第一服务器在所述zookeeper创建一个与所述任务唯一对应的第一临时目录。

其中,第一临时目录也可以称作临时节点,是一种数据存储方式,有点像文件夹,在一个临时目录下可以再创建子临时目录,也可以记录数据。需要指出的是,临时目录的名称与任务对应,一个任务对应一个临时目录的名称,而临时目录的名称与服务器的代码有关,当不同服务器的代码相同时,该不同服务器为同一个任务创建的临时目录的名称是相同的。

其中,第一临时目录记录的数据包括:创建所述第一临时目录的服务器的ip地址,以便于用户获知是哪一个服务器创建第一临时目录。可选地,所述第一临时目录记录的数据还包括:该第一临时目录的创建时间等。

步骤s14,所述第一服务器执行所述第一临时目录对应的任务。

具体地,当第一服务器成功在zookeeper创建第一临时目录后,该第一服务器具备执行该第一临时目录对应的任务的资格。

由于只有一台服务器的任务会在zookeeper创建临时目录成功,且临时目录都是在zookeeper上创建,因此,服务器本身的时间存在偏差时也不会影响zookeeper的时间,从而保证同一个任务不会因为服务器本身的时间存在偏差而导致重复执行。

可选地,在所述步骤s13之后,包括:

a1、所述第一服务器发送tcp心跳至所述zookeeper,以使所述zookeeper判断所述第一服务器是否能够正常通信。具体地,第一服务器定时向zookeeper发送tcp心跳,若该zookeeper接收到第一服务器发送的tcp心跳,则判定该第一服务器还能正常通信,否则,若在超出预设时长阈值还没有接收到该第一服务器发送的tcp心跳,则判定该第一服务器失去联系,不能正常通信(当第二服务器发生故障时,该第二服务器不能与zookeeper正常通信,发生的故障例如硬件故障、内存溢出、网络问题等)。

a2、在所述zookeeper判断出所述第一服务器不能够正常通信时,删除所述第一服务器创建的第一临时目录。可选地,在a2之后,所述zookeeper将删除记录存入对应的日志,以便于后续查找。其中,删除记录包括删除的第一临时目录的信息(如名称、创建的服务器的ip、删除时间等)。

可选地,在所述步骤s13之后,包括:

b1、第二服务器向所述第一临时目录注册监听事件,以监听所述第一临时目录是否被删除。需要指出的是,该第二服务器为与第一服务器不同的服务器,该“第一”、“第二”仅用于区分不同的服务器,并无先后顺序之分。另外,该第二服务器的个数可以为1个,也可以为多个。

b2、在所述第一临时目录被删除时,所述第二服务器向所述zookeeper发送第二临时目录创建请求。当第二服务器(一个或多个服务器)监测到第一服务器在zookeeper创建的第一临时目录被删除后,则向zookeeper发送第二临时目录创建请求。

b3、若接收到所述zookeeper发送的包含同意创建第二临时目录的信息,所述第二服务器创建与所述任务对应的第二临时目录,并执行所述任务。所述zookeeper若接收到多个第二临时目录创建请求,则同样只选择其中一个服务器作为创建第二临时目录的第二服务器,并向选择的第二服务器返回包含同意创建第二临时目录的信息,第二服务器接收到信息后向所述zookeeper创建与中断的任务对应的第二临时目录,并执行该任务。需要指出是,当第二服务器的代码与第一服务器的代码相同时,由于其还是执行同一个任务,因此其创建的第二临时目录的名称与第一临时目录的名称相同,这是因为服务器代码控制不同的定时任务对应的临时目录名称不同,不同的定时任务监听的目录是不同的。

可选地,为了节省资源,则第二服务器从任务中断的地方开始执行,对应地,所述第二服务器创建与所述任务对应的第二临时目录,并执行所述任务,包括:

c1、所述第二服务器创建与所述任务对应的第二临时目录。

c2、所述第二服务器判断所述zookeeper是否记录所述第一服务器执行所述第一临时目录对应的任务的执行进度及完成度。其中,这里的执行进度主要是指任务的当前执行程度,完成度是指对任务的完成情况,例如,假设一个任务有多个子任务,则任务的执行进度对应子任务的完成个数,完成度对应每个子任务的完成情况,例如,哪个子任务已执行完成,哪个子任务没有执行完成的描述等。

c3、在所述zookeeper记录所述第一服务器执行所述第一临时目录对应的任务的执行进度及完成度时,所述第二服务器根据所述zookeeper记录的任务的执行进度及完成度继续执行所述任务。具体地,第二服务器根据zookeeper记录的任务的执行进度及完成度查找任务的中断点,再从中断点继续执行。由于直接从任务的中断点开始执行,因此,节省了重新开始执行任务的时间,也节省了第二服务器重新执行任务所耗费的资源。

可选地,为了能够准确判断任务的执行进度及完成度,所述第二服务器创建与所述任务对应的第二临时目录,并执行所述任务,包括:

d1、所述第二服务器创建与所述任务对应的第二临时目录。

d2、所述第二服务器判断所述zookeeper是否记录所述第一服务器执行所述第一临时目录对应的任务的执行进度及完成度。

d3、在所述zookeeper记录所述第一服务器执行所述第一临时目录对应的任务的执行进度及完成度时,所述第二服务器判断所述任务是否与数据库有关。具体地,当任务涉及修改(包括新增或删除或修改)数据库的数据时,判定任务与数据库有关。

d4、在所述任务与数据库有关时,所述第二服务器获取所述数据库中与所述任务有关的信息。其中,与任务有关的信息包括数据库记录的任务的执行进度及完成度,当然,还可以包括数据库中被修改的数据的信息(如被修改的数据的位置,是否被修改完成的描述等)。

d5、所述第二服务器根据获取的所述数据库中与所述任务有关的信息验证所述zookeeper记录的任务的执行进度及完成度是否准确。具体地,当获取的数据库中与任务有关的信息仅为任务的执行进度及完成度时,则将数据库获取的任务的执行进度及完成度与zookeeper记录的任务的执行进度及完成度比较,若两者完全相同,则判定zookeeper记录的任务的执行进度及完成度是准确的,否则,判定zookeeper记录的任务的执行进度及完成度是不准确的。

当获取的数据库中与任务有关的信息包括任务的执行进度及完成度,也包括数据库中被修改的数据的信息时,则首先根据数据库中被修改的数据的信息验证数据库中与任务有关的信息包括任务的执行进度及完成度是否准确,若准确,则继续将数据库获取的任务的执行进度及完成度与zookeeper记录的任务的执行进度及完成度比较,以进一步验证zookeeper记录的任务的执行进度及完成度是否准确。

d6、在所述第二服务器验证出所述zookeeper记录的任务的执行进度及完成度准确时,根据所述zookeeper记录的任务的执行进度及完成度继续执行所述任务。在所述第二服务器验证出所述zookeeper记录的任务的执行进度及完成度不准确时,校正所述zookeeper记录的任务的执行进度及完成度,并根据校正后的所述zookeeper记录的任务的执行进度及完成度继续执行所述任务。

由于对zookeeper记录的任务的执行进度及完成度进行校验,因此,确保任务的执行进度及完成度是准确的,进而确保任务的中断点是准确的,从而提高继续执行任务的开始点的精确性。

本发明实施例中,由于zookeeper保证并发只有唯一一台服务器执行任务,且当服务器故障时也能保证其他服务器接管任务继续执行,因此,不会出现多个服务器同时执行同一个任务的情况,从而减少了由于同时执行同一个任务导致的服务器故障。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

对应于上文实施例所述的任务处理方法,图2示出了本发明实施例提供的一种任务处理系统的结构示意图,为了便于说明,仅示出了与本发明实施例相关的部分。

参照图2,该系统2包括:一个或多个服务器21、zookeeper22,其中,所述一个或多个服务器包括第一服务器211。

所述一个或多个服务器21用于在执行任务之前,向分布式应用程序协调服务zookeeper发送第一临时目录创建请求。

所述zookeeper22用于选择一个服务器,向被选择的服务器发送包含同意创建第一临时目录的信息,所述被选择的服务器为第一服务器。

当只有一个服务器向zookeeper22发送第一临时目录创建请求时,该zookeeper选择该服务器作为第一服务器,并同意所述第一服务器创建第一临时目录。

当有多个服务器向zookeeper22发送第一临时目录创建请求时,zookeeper22只会同意其中一个服务器创建第一临时目录。可选地,zookeeper22根据接收到第一临时目录创建请求的先后顺序选择同意哪一个服务器创建第一临时目录,比如,只同意最先发送第一临时目录创建请求的服务器创建第一临时目录。当然,zookeeper22也可根据服务器的优先权选择优先权最高的服务器创建第一临时目录。其中,服务器的优先权可根据服务器完成任务的情况设定,比如,统计一段时间内各个服务器完成任务的情况,若服务器能够完整完成一个任务而不出现故障,则该服务器对应的权值增大,当权值增大到一定值,则将该服务器的优先级提高一个等级。同理,若服务器在执行一个任务过程中出现故障而中断任务的执行,则减小该服务器对应的权重,当权值减小到一定值,则将该服务器的优先级降低一个等级。

所述第一服务器211用于在所述zookeeper22创建一个与所述任务唯一对应的第一临时目录,并执行所述第一临时目录对应的任务。

其中,第一临时目录记录的数据包括:创建所述第一临时目录的服务器的ip地址,以便于用户获知是哪一个服务器创建第一临时目录。可选地,所述第一临时目录记录的数据还包括:该第一临时目录的创建时间等。

可选地,所述第一服务器211还用于发送tcp心跳至所述zookeeper22,以使所述zookeeper22判断所述第一服务器211是否能够正常通信。具体地,第一服务器211定时向zookeeper22发送tcp心跳,若该zookeeper22接收到第一服务器211发送的tcp心跳,则判定该第一服务器211还能正常通信,否则,若在超出预设时长阈值还没有接收到该第一服务器211发送的tcp心跳,则判定该第一服务器211失去联系,不能正常通信(当第二服务器发生故障时,该第二服务器不能与zookeeper22正常通信,发生的故障例如硬件故障、内存溢出、网络问题等)。

所述zookeeper22还用于在判断出所述第一服务器211不能够正常通信时,删除所述第一服务器211创建的第一临时目录。

可选地,所述zookeeper22还用于将删除记录存入对应的日志,以便于后续查找。其中,删除记录包括删除的第一临时目录的信息(如名称、创建的服务器的ip、删除时间等)。

可选地,所述任务处理系统包括第二服务器。

所述第二服务器用于向所述第一临时目录注册监听事件,以监听所述第一临时目录是否被删除。需要指出的是,该第二服务器为与第一服务器211不同的服务器,该“第一”、“第二”仅用于区分不同的服务器,并无先后顺序之分。另外,该第二服务器的个数可以为1个,也可以为多个。

在所述第一临时目录被删除时,所述第二服务器向所述zookeeper22发送第二临时目录创建请求。

若接收到所述zookeeper22发送的包含同意创建第二临时目录的信息,所述第二服务器创建与所述任务对应的第二临时目录,并执行所述任务。当第二服务器的代码与第一服务器211的代码相同时,由于其还是执行同一个任务,因此其创建的第二临时目录的名称与第一临时目录的名称相同,这是因为服务器代码控制不同的定时任务对应的临时目录名称不同,不同的定时任务监听的目录是不同的。

可选地,为了节省资源,则第二服务器从任务中断的地方开始执行,对应所述第二服务器创建与所述任务对应的第二临时目录,并执行所述任务,包括:

所述第二服务器创建与所述任务对应的第二临时目录。

所述第二服务器判断所述zookeeper22是否记录所述第一服务器211执行所述第一临时目录对应的任务的执行进度及完成度。其中,这里的执行进度主要是指任务的当前执行程度,完成度是指对任务的完成情况,例如,假设一个任务有多个子任务,则任务的执行进度对应子任务的完成个数,完成度对应每个子任务的完成情况,例如,哪个子任务已执行完成,哪个子任务没有执行完成的描述等。

在所述zookeeper22记录所述第一服务器211执行所述第一临时目录对应的任务的执行进度及完成度时,所述第二服务器根据所述zookeeper22记录的任务的执行进度及完成度继续执行所述任务。

可选地,为了能够准确判断任务的执行进度及完成度,所述第二服务器创建与所述任务对应的第二临时目录,并执行所述任务,包括:

所述第二服务器创建与所述任务对应的第二临时目录。

所述第二服务器判断所述zookeeper22是否记录所述第一服务器211执行所述第一临时目录对应的任务的执行进度及完成度。

在所述zookeeper22记录所述第一服务器211执行所述第一临时目录对应的任务的执行进度及完成度时,所述第二服务器判断所述任务是否与数据库有关。具体地,当任务涉及修改(包括新增或删除或修改)数据库的数据时,判定任务与数据库有关。

在所述任务与数据库有关时,所述第二服务器获取所述数据库中与所述任务有关的信息。其中,与任务有关的信息包括数据库记录的任务的执行进度及完成度,当然,还可以包括数据库中被修改的数据的信息(如被修改的数据的位置,是否被修改完成的描述等)。

所述第二服务器根据获取的所述数据库中与所述任务有关的信息验证所述zookeeper22记录的任务的执行进度及完成度是否准确。具体地,当获取的数据库中与任务有关的信息仅为任务的执行进度及完成度时,则将数据库获取的任务的执行进度及完成度与zookeeper22记录的任务的执行进度及完成度比较,若两者完全相同,则判定zookeeper记录的任务的执行进度及完成度是准确的,否则,判定zookeeper22记录的任务的执行进度及完成度是不准确的。当获取的数据库中与任务有关的信息包括任务的执行进度及完成度,也包括数据库中被修改的数据的信息时,则首先根据数据库中被修改的数据的信息验证数据库中与任务有关的信息包括任务的执行进度及完成度是否准确,若准确,则继续将数据库获取的任务的执行进度及完成度与zookeeper22记录的任务的执行进度及完成度比较,以进一步验证zookeeper22记录的任务的执行进度及完成度是否准确。

在所述第二服务器验证出所述zookeeper22记录的任务的执行进度及完成度准确时,根据所述zookeeper22记录的任务的执行进度及完成度继续执行所述任务。在所述第二服务器验证出所述zookeeper22记录的任务的执行进度及完成度不准确时,校正所述zookeeper22记录的任务的执行进度及完成度,并根据校正后的所述zookeeper22记录的任务的执行进度及完成度继续执行所述任务。

本发明实施例中,由于zookeeper保证并发只有唯一一台服务器执行任务,且当服务器故障时也能保证其他服务器接管任务继续执行,因此,不会出现多个服务器同时执行同一个任务的情况,从而减少了由于同时执行同一个任务导致的服务器故障。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明实施例各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

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