首页> 中国专利> 一种在集群环境下实现任务的方法、装置及系统

一种在集群环境下实现任务的方法、装置及系统

摘要

本发明涉及一种在集群环境下实现任务的方法、装置及系统。在本发明实施例中,由集群环境中指定的应用从数据库中获取任务,并加载获取的所述任务,创建任务实例,并将所述任务实例保存在该指定的应用所属服务器内存中,从而在避免了集群环境下,出现数据库中任务被多次加载的情况。

著录项

  • 公开/公告号CN101471810A

    专利类型发明专利

  • 公开/公告日2009-07-01

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN200710305099.6

  • 发明设计人 章志国;

    申请日2007-12-28

  • 分类号H04L12/24(20060101);H04M3/24(20060101);

  • 代理机构11260 北京凯特来知识产权代理有限公司;

  • 代理人郑立明

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-12-17 22:14:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-09-14

    授权

    授权

  • 2009-08-26

    实质审查的生效

    实质审查的生效

  • 2009-07-01

    公开

    公开

说明书

技术领域

本发明涉及通信技术领域,尤其涉及一种在集群环境下实现任务的方法、系统及装置。

背景技术

为了提高系统的容灾能力和性能,集群技术被越来越多地应用。但是许多以前单机版的功能一旦迁移到集群环境下,就可能会出现问题。如实现任务功能,因为集群时各个服务器节点的应用共享数据库(如附图1所示),因此,处于不同服务器中的多个应用可能同时获取同一个数据库中的同一个任务(比如启动或重启过程),这样将使得一个任务可能会被多个应用重复加载,从而导致一个任务被错误地变成了多个任务在执行。

为了避免上述错误场景的出现,现有的处理方案是在任务的数据库表中增加一个字段用来标识该任务是否已经启动(如是否已经存在内存中),若该任务已经启动,则其他应用不能启动该任务,从而避免了上述错误场景的出现。

发明人在实现本发明的过程中发现上述现有技术至少存在以下问题:

上述现有技术中采用的解决问题的系统结构复杂,且很难保证可以准确标记任务的启动状态,例如,应用服务器启动后,一个应用从数据库中取到一个任务,做一个标记,在执行取任务与做标记这两个操作之间可能存在一个延迟,而在该延迟的时间段内另一个应用将有可能也取到了同一个任务,进而导致一个任务被多次应用启动。

进一步地,在上述现有技术中,如果某个应用服务器发生异常或关闭, 现有的系统不能够将任务自动迁移到其它正常工作的应用服务器上,使得发生异常或关闭的系统中任务无法被应用。

另外,在上述现有技术中,当某一个应用先行启动后,可能会将所有的任务均加载到某一应用上,导致该应用成为整个集群的性能瓶颈。

发明内容

本发明实施例要解决的主要技术问题是提供一种在集群环境下实现任务的方法、系统及装置,以确保在集群环境下,任务不会被重复加载。

本发明实施例提供了一种在集群环境下实现任务的方法,包括:

由指定的应用从数据库中获取任务;

所述指定的应用加载获取的所述任务,创建任务实例,并将所述任务实例保存在该指定的应用所属服务器内存中。

本发明实施例还提供了一种实现任务的装置,包括:

判断单元,判断作为指定的应用是否需要执行任务加载操作;

任务处理单元,用于在所述判断单元确定作为指定的应用需要执行任务加载操作后,获取并加载任务,创建任务实例,将所述任务实例保存在该装置所属服务器内存中。

本发明实施例还提供了一种在集群环境下实现任务的系统,包括:

数据库,用于保存任务及其时间戳;

任务实现装置,用于在判断到需要执行任务加载操作时,获取并加载保存在所述数据库中的任务,创建任务实例,将所述任务实例保存在该装置所属服务器内存中。

由上述本发明实施例提供的技术方案可以看出,在本发明实施例中,通过在集群中,指定负责获取数据库中任务的应用,并由指定的应用加载获取的任务,创建任务实例,并将任务实例保存在该应用所属服务器内存中,以在集群环境下避免出现数据库中任务被多次加载的情况。

附图说明

图1为现有技术中在集群环境下实现任务的示意图;

图2为本发明实施例一提供的方法具体实现流程示意图;

图3为本发明实施例一提供的方法中实现扫描线程示意图;

图4为本发明实施例一提供的方法具体实现部署示意图一;

图5为本发明实施例一提供的方法具体实现部署示意图二;

图6为本发明实施例二提供的系统具体实现结构示意图。

具体实施方式

本发明实施例提供了一种在集群环境下实现任务的方法。所述方法中,首先可以由指定的应用从数据库中获取任务,并加载获取的所述任务,创建任务实例(即通过加载执行相应任务得到所述任务实例),将所述任务实例保存在该指定的应用所属服务器内存中。然后,所述指定的应用启动扫描线程,将数据库中的发生变化或新增的任务同步到所述服务器内存中,从而在集群环境下,正确的实现任务操作。

本发明实施例提供的在集群环境下实现任务的方法,进一步还包括设置启动模式,即设置所述指定的应用的步骤,且该步骤包括:

将集群环境中的一个或多个应用设置为任务调度启动模式,所述设置为任务调度启动模式的应用作为所述指定的应用;

将集群环境中的其他应用设置为节点启动模式,所述设置为节点启动模式的应用用于创建任务,将创建的任务保存在数据库中,并对数据库中的任务进行更新操作。

下面将结合附图对本发明实施例作进一步地详细描述。

本发明实施例提供的在集群环境下实现任务的方案是在现有单机任务管理基础上,提出了任务调度的概念,通过为集群中不同服务器中的应用设置不同的启动模式,从而使得在集群环境下,仅由指定的应用执行相应的任务加载的操作,进而可以正确地实现相应的任务,如定时任务或其他各种任务等,解决现有技术中存在的弊端。

进一步地,本发明实施例中所涉及的启动模式具体可以为单机启动模式、节点启动模式、任务调度启动模式,其中:

单机启动模式,通常应用于非集群环境下,工作在单机启动模式下的应用,单独完成任务的加载、执行和生命周期(即任务的生存周期)的管理,可以理解为与现有技术处理流程类似,因此,本实施例不在赘述;

节点启动模式,通常应用于集群环境下,工作在节点启动模式下的应用不再完成任务的加载、执行和生命周期的管理,只是涉及客户端对数据库中任务的创建,以及增加、删除或修改等更新操作,或者其它操作。因此,工作在节点启动模式下的应用在启动时,不会启动数据库中任务,不会发生抢占系统资源的情况,通常,可以将集群内大多数服务器中的应用被设置成节点启动模式;

任务调度启动模式,通常应用于集群环境下,工作在任务调度启动模式下的应用,可以完成任务的加载、执行和生命周期的管理,是集群内的核心应用;且工作在任务调度模式下的应用,还可以不再涉及任务的创建,以及客户端对任务的更新处理操作。

在本发明实施例具体应用过程中,可以预先通过配置文件对集群中的不同服务器中的应用设置不同的启动模式,之后,还可以根据需要对相应的设置进行更改。

在上述任务调度启动模式下,相应的应用可以通过扫描线程对数据库中的任务进行处理,具体的处理方式可以包括:由工作在任务调度启动模式的应用,在完成任务的加载及任务实例的创建后,扫描数据库中任务的时间戳,并将时间戳大于已被获取的任务的启动加载时间的任务从数据库过滤出来,同步到该应用所属服务器内存中。

在上述扫描线程中,具体可以可按一定周期,即定时扫描,也可以根据需要,进行任意设定模式的扫描操作。

在上述扫描线程中涉及的时间戳,通常是指在数据库中,任务被创建,或者,任务发生启动、增加、删除或修改操作,或者其它操作的时间,通常可以理解为,集群内工作在节点启动模式的应用根据客户端的要求创建任务的时间,或者根据客户端的要求,对已经保存在数据库中的任务进行增加、删除或修改操作的时间,或者如任务被启动的时间等其它操作的时间。

当扫描到的任务时间戳大于已经被加载的任务启动时间,则表明在数据库中保存的任务被加载后,客户端通过节点启动模式的应用对数据库中的任务进行了增加、删除或修改等操作,这意味着已经被加载的任务存在变更的可能,或者数据库中出现新的任务。所以,当被设置成任务调度启动模式的应用扫描到上述情况时,需要将已经创建的任务实例,与数据库中发生变更的任务,或新增加的任务进行同步操作,从而确保数据库中的任务被正确的执行。

上述任务同步操作的过程具体可以将过滤出来的任务与服务器内存中保存的任务实例相比较,根据比较结果采用的处理如下:

(1)如果二者的任务标识一致,即在所述服务器内存中找到与所述过滤出来的任务相同的任务标识,则更新所述服务器内存中任务实例的属性,或者,若从数据库中过滤出的所述任务处于删除状态,则删除服务器内存对应的任务实例;其中,所述任务标识用于唯一标识一任务;

(2)如果在所述服务器内存中没有找到与所述过滤出来的任务相同的任务标识,则在服务器内存中创建该新任务的任务实例。

本实施例提供的在集群环境下实现任务的方法,具体实现过程可以如附图2所示,包括:

步骤21,为集群中,分属于不同服务器中的应用设置启动模式。

如上所述,在本发明实施例具体应用过程中,可以预先对集群中,不同服务器中的应用设置不同启动模式,并根据需要进行更改,且启动模式具体可以包括:单机启动模式、节点启动模式或任务调度启动模式,各模式下具体需要实现的功能前面已经描述在此不再详述。

步骤22,被设置为节点启动模式的应用根据客户端的任务指令创建并保存任务。

被设置为节点启动模式的应用,根据客户端的任务指令创建任务,比如在某日二十点开通300张电话卡,并将该任务保存在数据库中。

在保存任务后,还要在数据库中记录增加、删除或修改任务的时间戳等信息。

需要说明的是,步骤22与步骤21在执行过程中,无先后顺序之分。

步骤23,当应用启动时,根据预先设置的启动模式,由设置为指定启动模式(即设置为任务调度启动模式)的应用从数据库中获取任务。

当集群中,分属于不同服务器的应用启动或重启时,应用首先要读取自身的启动模式,如节点启动模式或任务调度启动模式,以便于根据相应的启动模式执行相应处理:

(1)若应用读取自身的启动模式为节点启动模式,此时,该应用不再管理任务的加载、执行和生命周期管理,即不获取数据库中的任务,只涉及根据客户的要求,创建并保存任务,以及对数据库中的任务进行更新,即对数据库中的任务进行增加、修改或删除操作,或者其它操作;比如,客户要求更改开通300张电话的时间,或者开通电话卡的数量由300变成500,或者取消这次任务,或者增加了一个新任务,则工作在节点启动模式的应用根据客户的要求,对数据库中的任务进行增加、删除或修改操作,此时,在数据库中需要记录上述增加、删除或修改任务的时间戳,以便于准确处理相应的任务;

(2)若应用读取自身的启动模式为任务调度模式,则该应用获取数据库中的任务,并执行步骤24。

步骤24,被设置为任务调度模式的应用加载获取的任务,创建任务实例,并保存在该应用所属服务器内存中。

即工作在任务调度模式下的应用加载在数据库中获取的任务,创建任务实例,如上述在某日二十点开通300张电话卡;并将创建的任务实例保存在该应用所属服务器的内存中。

步骤25,被设置为任务调度模式的应用启动扫描线程,同步数据库中的任务到服务器内存中。

当所述指定的应用根据在数据库中获取任务,创建任务实例后,还可以启动扫描线程功能,按预先制订的时间周期,扫描数据库中任务的时间戳。并把时间戳大于已被启动加载的任务的启动加载的时间的任务,从数据库中过滤出来,并与在服务器内存中的任务实例进行同步操作。

描述过滤处理流程如附图3所示,具体可以包括:

步骤251,判断扫描时间是否到来。

若扫描时间到来,则执行步骤252,否者,循环执行步骤251,等待扫描时间的到来。

步骤252,扫描数据库。

若扫描时间到来,则开始扫描数据库中任务的时间戳。

步骤253,判断时间戳是否大于任务启动加载时间。

若应用扫描到数据库中任务的时间戳大于该应用所属服务器内存保存的任务实例所对应的任务的启动加载时间,则执行步骤254,否则,执行步骤251。

步骤254,将数据库中任务过滤出来。

将数据库中,满足步骤253判断条件的任务过滤出来,即获取满足条件的任务。

步骤255,将过滤出来的任务与内存中任务实例进行同步操作。

将过滤出来的任务,与应用所属服务器内存中的任务实例进行同步操作。且同步操作具体过程可以为:将过滤出来的任务与服务器内存中保存的任务实例相比较,如果二者的任务标识一致,则更新所述服务器内存中任务实例的属性,或者,若从数据库中过滤出的所述任务处于删除状态,则删除服务器内存对应的任务实例;如果在所述服务器内存中没有找到与所述过滤出来的任务相同的任务标识,则在服务器内存中创建该新任务的任务实例。

通过上述扫描线程可以实现任务的更新操作,如删除或修改等。

在完成上述操作后,重新执行步骤251,执行下一次的处理流程。

本发明实施例提供的在集群环境下实现任务的方法,通过为集群中,不同服务器中的应用设置不同的启动模式,且工作在任务调度启动模式下的应用只负责完成任务的加载、执行和生命周期的管理,不再涉及客户端对任务的创建及更新处理操作,这样即使在某一个设置为任务调度启动模式的应用先行启动,且系统将所有的任务均加载到该应用上,也由于该应用仅负责任务的加载操作及加载后任务的执行、管理操作,不涉及其他业务的处理,因此,在该应用处不会成为整个集群系统的性能瓶颈。

而且,工作在节点启动模式下的应用,只涉及创建任务,以及客户端对数据库中任务的增加、删除或修改等操作,不再管理任务的加载、执行和生命周期的管理,因此,工作在节点启动模式下的应用在启动时,不会启动数据库中任务,不会发生抢占系统资源的情况,这样就避免了一个任务被多个应用重复加载的情况。

本发明实施例提供的在集群环境下实现任务的方法,具体应用过程可以如附图4所示,将集群中的业务应用服务器中的应用设置成节点启动模式,将独立于集群环境下的应用服务器中的应用设置成任务调度启动模式,即让应用服务器成为任务调度服务器。而且,如果出于集群容灾能力的考虑,可以将任务调度服务器设置为多机,较佳的方式设置为双机,且双机互为备份,即一主一备,这样既可以避免发生当应用启动时抢占系统资源的情况,又可以增加系统在容灾方面安全系数。

本实施例提供的在集群环境下实现任务的方法,在具体应用过程中,如果出于硬件成本的考虑,则可以把集群环境下的某一台业务应用服务器配置成任务调度服务器,如附图5所示,这样,相对于附图4所示的配置方式,降低了集群的构造成本。

本发明实施例还提供了一种在集群环境下实现任务的系统,如附图6所示,该系统包括启动模式设置装置601,数据库602,被设置为节点启动模式的任务创建及更新装置603以及被设置为任务调度启动模式任务实现装置607,其中:

启动模式设置装置601,用于为集群中,与任务相关联的装置(603和/或607)设置启动模式。

启动模式设置装置601设置的启动模式具体可以包括:单机启动模式,节点启动模式,任务调度启动模式。其中,由于单机启动模式数据非集群环境下工作模式,因此本发明实施例不再赘述。

启动模式设置装置601可以预先为系统中,与任务相关联的装置(603和/或607)设置不同的启动模式,并根据需要进行修改。

数据库602,用于保存被创建的任务及其时间戳。

被设置为节点启动模式的任务创建及更新装置603,用于根据用户的信息,创建并保存任务至数据库602中,并对数据库中的任务进行更新操作。

任务创建及更新装置603包括:

更新判断单元604,用于在任务创建及更新装置603启动时,判断装置603的启动模式是否为节点启动模式,即判断装置603是否需要创建任务和/或对数据库603中的任务进行更新操作。

任务创建及保存单元605,用于在更新判断单元604确定装置603需要创建任务时,根据用户的要求创建任务,并将创建的任务保存在数据库中602中。

任务更新操作单元606,用于在更新判断单元604确定装置603需要对数据库602中的任务进行更新操作后,根据用户的要求,对数据库602中的任务进行更新操作,具体可以包括增加、删除或修改数据库602中的任务。

本发明实施例提供的在集群环境下实现任务的系统中,可以存在一个,或者多个装置603,但装置603不再完成任务的加载、执行和生命周期的管理,只是涉及客户端对数据库602中任务的创建、增加、删除或修改操作,或者其它操作,因此,装置603不会启动数据库602中任务,避免了一个任务被多个应用重复加载的情况。

被设置为任务调度启动模式的任务实现装置607,用于在判断到需要执行任务加载操作时,获取并加载保存在所述数据库602中的任务,创建任务实例,将所述任务实例保存在该装置607所属服务器内存中。并启动扫描线程,将数据库中的任务同步到所述服务器内存中。

任务实现装置607包括:

判断单元608,用于在任务实现装置607启动时,判断装置607的启动模式是否为任务调度启动模式,即判断装置607是否需要执行数据库602中的任务。

任务处理单元609,用于在所述判断单元608确定需要执行任务加载操作后,获取并加载任务,创建任务实例,将所述任务实例保存在该装置所属服务器内存中。

可选地,该实时任务实现装置607还可以包括同步处理单元610,用于启动扫描线程,将数据库602中的任务同步到所述服务器内存中。

该同步处理单元610具体可以包括:

扫描过滤单元611,用于扫描数据库602中任务的时间戳,并将数据库602中保存的任务的时间戳,大于所述任务处理单元609获取所述数据库中任务的时间的任务过滤出来。

同步单元612,用于对扫描过滤单元611过滤出的任务,与服务器内存保存的任务实例进行同步操作。

同步单元612具体操作过程可以为:将扫描过滤单元611过滤出来的任务与服务器内存中保存的任务实例相比较,如果二者的任务标识一致,则更新所述服务器内存中任务实例的属性,或者,若扫描过滤单元611从数据库602中过滤出的所述任务处于删除状态,则删除服务器内存对应的任务实例;如果在所述服务器内存中没有找到与所述过滤出来的任务相同的任务标识,则在服务器内存中创建该新任务的任务实例。

本发明实施例提供的在集群环境下实现任务的系统中,可以存在一个或多个任务实现装置607,较佳的方式为设置互为备份的双机模式,即一主一备,这样既可以避免发生现有技术中存在的,当应用启动时抢占系统资源的情况,又可以增加系统在容灾方面安全系数。而且任务实现装置607只负责完成任务的加载、执行和生命周期的管理,不再涉及客户端对任务的更新处理操作,这样就避免了当某一个应用先行启动时,系统可能就会把所有的有关任务的操作加载到这个应用上,造成这个应用可能就会成为整个集群的性能瓶颈的问题。

本发明实施例中提供的在集群环境下实现任务的系统中的任务创建及更新装置603、任务实现装置607可以设置于服务器中。

综上所述,本发明实施例的实现有效解决了现有技术中存在的问题,具体可以产生的有益效果包括:

(1)由于采用了仅由设置为任务调度模式的应用实现任务的加载操作,因此,若仅设置一个应用为任务调度模式,则不再会出现一个任务被多个应用加载的情况;

(2)在本发明实施例中,若某个应用服务器发生异常或关闭,则可以通过重新设置其他应用服务器中的应用的启动模式的方式将数据库中的任务自动迁移到其它正常工作的应用服务器上,从而保证相应的任务仍然可以被正常应用;

(3)在本发明实施例中,由于可以通过灵活地设置选择加载任务的服务器中的应用,且该应用仅负责任务的加载操作,因此,可以有效避免将所有的任务均加载到某一处理能力较弱或处理任务繁重的应用上,导致该应用成为整个集群的性能瓶颈。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号