任务执行方法及装置、分布式系统与流程

文档序号:14950521发布日期:2018-07-17 22:26阅读:144来源:国知局

本申请涉及分布式任务处理领域,具体而言,涉及一种任务执行方法及装置、分布式系统。



背景技术:

在对特定类型的数据进行处理时,往往会涉及到延时处理或定时处理,例如风控系统中,除了常见的对风险实时处理外,还存在着暂时保留风险数据,延迟处理风险数据的需求,或者存在需要定时处理风险数据的需求。由于系统处理量大,以及数据不能丢失,因此不能直接在内存中做延时处理。一般需要将风险数据暂存,等符合条件后再取出处理。常见的处理方案有:

内存中延迟处理:直接使用线程暂停等方法实现延迟。

将任务存储于数据库,产生任务的主机负责任务的延迟、延时检测和执行。

将任务写入数据库,由集群master负责任务的延时检测,执行。

将任务写入数据库,由多个master共同检测过期任务,通过分布式加锁的方式保证任务不被重复执行。

但是,上述处理方案中存在以下缺陷:

内存中延迟处理:这种方式仅适用于数据量小、允许数据丢失的场景。因为数据量大后内存会不够,如果出现宕机,则数据会丢失。

任务存储于数据库,单机处理:这种方式任务的处理与主机绑定,如果主机宕机或下线,则任务不能被正常执行。

集群master检测和执行任务:这种方式将所有负载置于master主机上,不能承载大流量,master宕机后任务执行会中断。

分布式加锁方式:每台master都需要扫描全量任务,每秒扫描次数被放大n倍;集群规模大、检测模块数量多时会有大量无效过程(扫描,加锁);加锁时长不好控制(加锁过程负载过重或者加锁过程会过早失效)。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本申请实施例提供了一种任务执行方法及装置、分布式系统,以至少解决相关技术中在对风险数据进行延时处理过程中存在稳定性和数据会丢失以及处理任务量较小的技术问题。

根据本申请实施例的一个方面,提供了一种任务执行方法,应用于多个主机,其中,所述多个主机中的至少一个主机包括:数据库模块,用于存储所述多个主机的定时任务,其特征在于,所述多个主机中的每个主机中还包括:与所述数据库模块连接的任务调度模块;所述方法包括:所述多个主机启动所述任务调度模块,获取与所述任务调度模块对应的一个或多个指定任务,其中,所述指定任务为所述定时任务中已到达定时时间的任务;将所述指定任务存储至消息队列中供所述多个主机调用执行。

根据本申请实施例的另一方面,还提供了一种分布式系统,包括:多个主机,其中,每个主机中包括:存储器,用于存储数据库模块和任务调度模块,其中,所述数据库模块用于存储所述多个主机的定时任务;处理器,用于启动任务调度模块,获取与所述任务调度模块对应的一个或多个指定任务,其中,所述指定任务为所述定时任务中已到达定时时间的任务。

根据本申请实施例的另一方面,还提供了一种任务执行装置,该装置应用于多个主机,其中,所述多个主机中的至少一个主机包括:数据库模块,用于存储所述多个主机的定时任务,其特征在于,所述多个主机中的每个主机中还包括:与所述数据库模块连接的任务调度模块;所述装置包括:启动模块,用于启动任务调度模块,获取与所述任务调度模块对应的一个或多个指定任务,其中,所述指定任务为定时任务中已到达定时时间的任务,所述定时任务为所述分布式主机的定时任务;存储模块,用于将所述指定任务存储至消息队列中供所述多个主机调用执行。

在本申请实施例中,将与任务调度模块对应的过期任务作为要执行的指定任务的方式,由于任务调度模块与上述指定任务之间存在对应关系,因此,可以实现对大任务量的处理,也可以保证指定任务检测模块数量增多时无需做调整,提高了任务处理效率;另外,由于一个集群中可以存在多个任务调度模块,因此,当一台主机的任务调度模块故障时,集群中的其他主机上运行的任务调度模块可以取代发生故障的任务调度模块,因此可以保证其中一个主机宕机时,任务仍能被正常执行,并且,由于将查找到的任务放入了消息队列中,因此,可以通过消息队列发送任务,使任务可以均匀分布到分布式主机中,同时保证任务不会丢失。由此可见,基于上述方案,本申请实施例解决了相关技术中在对风险数据进行延时处理过程中存在稳定性和数据会丢失以及处理任务量较小的技术问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的一种用于实现任务执行方法的工作原理示意图;

图2为根据本申请实施例的一种可选的任务写入模块的工作流程示意图;

图3为根据本申请实施例的一种可选的任务调度模块的工作流程示意图;

图4为根据本申请实施例的一种可选的调整任务键值key的工作流程示意图;

图5为根据本申请实施例的一种可选的任务执行模块的工作流程示意图;

图6是根据本申请实施例的一种用于实现任务执行方法的计算机终端的硬件结构框图;

图7是根据本申请实施例的一种用于实现任务执行方法的流程图;

图8是根据本申请实施例的一种可选的任务执行装置的结构示意图。

具体实施方式

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

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:

分布式主机:即采用分布式架构分布的主机。

任务调度模块:用于在任务池中扫描属于自己的任务,以及将扫描到的任务存储至消息队列中。该模块可以通过计算机软件实现,但不限于此。

任务池:业务层存储任务的组件,是任务的容器,是在线程间共享任务的实例池,其对客户是完全透明的。

实施例1

在一些场景下,需要将待处理任务进行延时处理,例如,以风控系统为例,在风控系统中,由于风控系统的数据处理量大,且需要保证数据不能丢失,因此不能直接在内存中做延时处理,需要暂存待处理的风险数据,但是,在对风险数据进行延时处理或定时处理时,存在稳定性和数据易丢失等技术问题,为解决上述问题,如图1所示,本实施例在分布式主机中设置了任务写入模块10,任务调度模块12和任务执行模块14。其中,

任务写入模块10存在于集群的每台主机上,负责将要延迟的风险数据,根据预定数据结构,写入kv数据库(例如hbase)。任务调度模块12从kv数据库(即任务池)中扫描到期任务,并发送到分布式消息队列中(例如metaq,rockmq等),包含任务调度模块12的主机在集群中通过master选举的方式选出,主机数量根据检测工作所需负载可动态配置,从而可以支持大规模数据的处理,解决处理的数据量受限的问题。任务执行模块14从分布式消息队列中监听到期任务,并从kv数据库中提取任务数据、执行任务。

可选地,任务写入模块10,用于生成任务标识,在本实施例中该任务标识表现为key,并写入kv数据库。其工作流程如图2所示:

步骤s202,依据获取的风险数据生成任务key,其中:

任务调度模块编号为事件key的hash值与当前任务调度模块编号数量进行取模运算;

过期时间戳为当前时间戳与过期时长之和;

任务key的构成格式:任务调度模块编号_过期时间戳_事件key

步骤s204,将事件数据,任务上下文作为数据,任务key作为key,写入kv数据库。

其中,任务key的生成方式保证了任务调度模块编号是预先分配的,从而在任务调度模块数量增多时,原有的任务仍可以被正确处理。在任务调度模块数量减少时,通过修改超出的任务key(详见任务调度模块),即可正确处理任务。

这里的kv数据库可以是hbase等,支持对任务key的在预定范围内扫描,以便快速检测任务是否已过期。

任务调度模块12,用于从kv数据库中扫描属于任务调度模块(即与任务调度模块12对应的任务)且已过期的任务,并将任务发送处理,检测过程可以由定时器(例如1s)触发。一个集群可以有多个延迟检测模块,每个延迟检测模块都被分配一个自身编号,且只能检测与自身编号相符的任务。一台主机的任务调度模块故障后,集群中的其他主机可以取代此任务调度模块,因此任务调度模块本身要能保证同一时间只有一个实例。当任务调度模块的数量减少时,多出的任务需要做收尾流程,避免属于自己的任务不能被正确处理。

如图3所示,任务调度模块12的检测流程包括:

步骤s302,构建扫描范围:start,end;

步骤s304,扫描属于自身编号且已过期的任务,其中,start=自身编号_0;end=自身编号_当前时间戳;

步骤s306,对于每个任务key,将其发送到分布式消息队列,由任务执行模块14接收分布式消息队列中的任务并执行。

需要说明的是,将任务发送到分布式消息队列的原因是:任务调度模块12发送出的任务,是已经过期且需要立即执行的任务。利用分布式消息队列分配任务,可以实现三项特性:1.使任务实时到达,2.均匀分布到集群上,3.任务不会丢失。

需要说明的是,任务调度模块12必须保证同一时刻,一个编号只有一个实例,原因是多个同编号实例会重复发送任务。因此在任务调度模块12启动(或重启)时和结束(或宕机)时,必须进行加锁、解锁操作。加锁操作借助于分布式锁服务(例如zookeeper)。其中,任务调度模块12启动(重启)流程如下:获取自身编号;通过分布式锁服务对自身编号加锁;加锁成功则启动,否则拒绝启动。任务调度模块12结束(宕机)流程如下:获取自身编号;通过分布式锁服务对自身编号解锁,或者如果模块宕机,则与分布式锁服务断开连接时,自动清除所有锁。

在一个可选实施例中,任务调度模块12的数量可以根据负载动态配置。当数量增多时,通过预先分配编号机制,系统不做调整即可正常运行。当数量减少时,需要对原编号大于新数量的任务进行修改(由于任务调度模块的编号是按照顺序编号的,其中,该编号可以表示任务调度模块的数量),达到重新分配的作用。当数量减少时任务调度模块的工作流程如下:

步骤s402,设置任务调度模块数量

步骤s404,判断当前任务调度模块的编号是否大于设置的任务调度模块的数量,如果是,转步骤s406,否则,结束;

步骤s406,停止扫描过期任务;

步骤s408,根据任务调度模块的编号,扫描所有属于本任务调度模块(即编号对应的任务调度模块)的任务;

步骤s410,根据新设置的任务调度模块数量,重新设置任务key(即设置任务key中任务调度模块编号)。

任务执行模块14,用于监听分布式消息队列中的消息,执行任务,执行完成后删除任务。如图5所示,其工作流程如下:

步骤s502,监听分布式消息队列;

步骤s504,根据接收到的任务key,从kv数据库中取出任务数据;

步骤s506,执行任务;

步骤s508,从kv数据库中删除任务。

需要说明的是,本实施例提高的方案可以应用于延时处理过程中,也可以应用于分布式定时器任务的处理过程中,但不限于此。

基于实施例1,本申请还提供了实施例2所述的方法和实施例3所述的装置,以下详细说明。

实施例2

根据本申请实施例,还提供了一种任务执行方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图6示出了一种用于实现任务执行方法的计算机终端(或移动设备)的硬件结构框图。如图6所示,计算机终端60(或移动设备60)可以包括一个或多个处理器602(处理器602可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器604、以及用于通信功能的传输模块606。除此以外,还可以包括:显示器、输入/输出接口(i/o接口)、通用串行总线(usb)端口(可以作为i/o接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图6所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端60还可包括比图6中所示更多或者更少的组件,或者具有与图6所示不同的配置。

应当注意到的是上述一个或多个处理器602和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端60(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。

存储器604可用于存储应用软件的软件程序以及模块,如本申请实施例中的方法对应的程序指令/数据存储装置,处理器602通过运行存储在存储器604内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的漏洞检测方法。存储器604可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器604可进一步包括相对于处理器602远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端60。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输装置606用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端60的通信供应商提供的无线网络。在一个实例中,传输装置606包括一个网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置606可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

显示器可以例如触摸屏式的液晶显示器(lcd),该液晶显示器可使得用户能够与计算机终端60(或移动设备)的用户界面进行交互。

在上述运行环境下,本申请提供了如图7所示的任务执行方法。该方法应用于多个主机,其中,上述多个主机中的至少一个主机包括:数据库模块,用于存储上述多个主机的定时任务,其特征在于,上述多个主机中的每个主机中还包括:与上述数据库模块连接的任务调度模块;图7是根据本申请实施例的一种用于实现任务执行方法的流程图。如图7所示,该方法包括步骤s702-s704:

s702,多个主机启动任务调度模块(可以为实施例1中的任务调度模块),获取与上述任务调度模块对应的一个或多个指定任务,其中,上述指定任务为上述定时任务中已到达定时时间的任务。可选地,上述指定任务可以通过以下方式获取:扫描由上述定时任务组成的任务池,从所述任务池中获取所述指定任务。

可选地,该步骤s702可以通过以下方式实现:在上述数据库模块中查找上述定时任务的任务标识,其中,上述任务标识中携带有为上述定时任务分配的任务调度模块的编号。在一个可选实施例中,该任务标识可以表现为键值key,但不限于此。

上述任务标识为依据以下信息生成的标识:上述任务调度模块的编号、上述定时任务的时间戳、与上述定时任务对应的事件,其中,上述任务调度模块的编号用于指示当前上述分布式主机已经具有的任务调度模块的数量。

可选地,任务池在存储任务时可以采用kv存储方式,也可以使用关系型数据库存储等。

可选地,在任务调度模块依据以下方式更新上述任务标识:获取上述分布式主机中预先设置的任务调度模块的数量;在预先设置的任务调度模块的数量小于上述任务标识中上述任务调度模块的编号时,调整上述任务标识中任务调度模块的编号。

在一个可选实施例中,上述任务调度模块的编号通过以下方式得到:将上述事件的哈希值与为上述任务调度模块所分配的编号信息进行取模运算,得到上述任务调度模块的编号。

依据上述任务标识中任务调度模块的编号确定与上述任务调度模块的编号对应的上述指定任务。可选地,该步骤可以表现为以下处理过程,但不限于此:查找与上述任务调度模块的编号对应并且上述定时任务中的定时时间小于上述任务调度模块的当前时间戳的任务,将查找结果所对应的任务作为上述指定任务。该步骤s704也可以定时执行,即按照预定时间依据上述任务标识中任务调度模块的编号确定与上述任务调度模块的编号对应的上述指定任务。

s704,将上述指定任务存储至消息队列中供上述多个主机调用执行。

在一个可选实施例中,在步骤s702之前,即在分布式主机启动任务调度模块之前,为保证在同一时刻,一个任务调度模块只有一个实例,在任务调度模块启动时,需要对其编号进行加锁,以防止将该编号分配给其他的任务调度模块,具体地:上述分布式主机获取上述任务调度模块的编号,并对上述任务调度模块的编号进行锁定处理,其中,上述锁定处理用于表示上述任务调度模块的编号已被使用,且禁止上述分布式主机的其他任务调度模块使用上述任务调度模块的编号。

另外,在对任务调度模块的编号进行加锁处理后,还需要对任务调度模块的编号进行解锁,例如在以下之一情况下对上述任务调度模块的编号解除锁定:上述任务调度模块故障、上述任务调度模块对应的进程或线程终止。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。

需要说明的是,本实施例中的优选实施方式可以参见实施例1中的相关描述,此处不再赘述。

实施例3

根据本申请实施例,还提供了一种用于实施上述任务执行方法的装置,该装置应用于多个主机,其中,上述多个主机中的至少一个主机包括:数据库模块,用于存储上述多个主机的定时任务,其特征在于,上述多个主机中的每个主机中还包括:与上述数据库模块连接的任务调度模块,如图8所示,该装置包括:

启动模块80,用于启动任务调度模块,获取与所述任务调度模块对应的一个或多个指定任务,其中,所述指定任务为定时任务中已到达定时时间的任务,所述定时任务为所述分布式主机的定时任务,其中,所述定时任务为所述分布式主机写入所述任务池中的定时任务,所述指定任务为所述定时任务中已到达定时时间的任务;

存储模块82,用于将所述指定任务存储至消息队列中供所述多个主机调用执行。

需要说明的是,上述各个模块式可以通过软件或硬件的形式实现的,对于后者可以表现为以下形式,但不限于此:上述各个模块位于同一处理器中;上述各个模块分别位于不同的处理器中。

需要说明的是,本实施例中的优选实施方式可以参见实施例1中的相关描述,此处不再赘述。

实施例4

本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的任务执行方法所执行的程序代码。

可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:分布式主机启动任务调度模块,扫描由定时任务组成的任务池,得到所述任务池中与任务调度模块对应的一个或多个指定任务,其中,所述定时任务为所述分布式主机写入所述任务池中的定时任务,所述指定任务为所述定时任务中已到达定时时间的任务;将所述指定任务存储至消息队列中供所述多个主机调用执行。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

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

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

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

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

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

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