一种基于Celery的可靠可配置任务系统及装置的制作方法

文档序号:26003805发布日期:2021-07-23 21:21阅读:109来源:国知局
一种基于Celery的可靠可配置任务系统及装置的制作方法

本发明涉及计算机异步任务调度架构领域,尤其涉及一种基于基础celery系统的动态可配置任务调度系统及其装置。



背景技术:

celery是python实现的,专注实时处理和任务调度的分布式任务队列,具有简单,可用,快速,灵活等特性,易于集成到一些开发的框架,有着广泛的应用场景。当用户在网站中进行某个操作需要很长时间时,可以将这种操作交给celery执行,先返回给用户一个友好的提醒,等任务执行完成后再返回结果。还有一些在运维场景中需要批量在几百台机器上执行一些命令或者任务时celery也可以轻松搞定,celery也提供定时任务,比如定时导出数据报表,定时发送等类似场景。

虽然celery系统便于进行大量消息队列的处理,但是,仅仅依靠celery系统并不能满足实际应用,例如对于可靠性要求较高的场景,或者对于动态变化的任务队列的处理,celery系统则不能很好地进行有效的监控和任务的合理调度,这就在实际应用中造成了不必要的任务调度错误或者时效上的失误,因此,如何保证任务队列调度和执行中的可靠性及应对不断任务需求的变化,是目前实际应用中需要解决的问题。



技术实现要素:

针对现有技术的不足,本发明提出一种基于celery的可靠可配置任务系统及装置,能够支持动态变化的任务队列的调度和执行,并有效提高任务的可靠性。具体而言,本发明提供了以下的技术方案:

一方面,本发明提供了一种基于celery的可靠可配置任务系统,所述系统包括:

网络接口模块、分配模块、配置模块、监控模块、数据库模块、celery模块、执行模块;

所述网络接口模块作为与网络端的数据输入、输出端口,并将接收到的数据信息发送至所述分配模块;

所述分配模块与所述数据库模块、celery模块进行数据交互,并为每一类注册在celery模块上的任务创建一个负载均衡,当所述分配模块接收到来自所述网络接口模块的提交任务请求后,在所述数据库模块中创建对应记录,再通过负载均衡将提交任务请求对应的任务发送至celery模块中的消息代理中;

所述配置模块用于维护系统的配置文件,并与所述监控模块进行数据交互;

所述监控模块用于解析和检查系统配置文件,并实时监控celery模块的定时任务调度器及执行模块的状态,同时,校验并执行配置模块发送的变更数据;

所述数据库模块用于进行系统数据存储。

所述执行模块用于执行下发的具体任务内容,由celery模块中的worker触发执行。

优选的,所述分配模块还用于:在任务执行结束时,如果任务执行成功,则保存结果到所述数据库模块,并返回信息给网络接口模块,如果任务执行不成功,则重新下发任务。

优选的,所述负载均衡还用于:当任务的预估执行时间差值满足一预设时间时,采用轮询方式监控任务状态;否则,依据执行时间对任务进行划分,以将任务归入不同队列。

优选的,所述队列数目与注册在celery模块上的类别数目相同。

优选的,所述分配模块在所述数据库模块中创建对应记录中,包括为任务分配的id、任务的参数、任务下发时间。

优选的,所述分配模块判断任务失败的方式为:

分配模块收到成功执行任务的返回信息时,会用该成功执行任务的下发时间与同队列中已下发任务的下发时间进行对比,如果连续n个已下发任务的下发时间都早于成功执行任务的下发时间,则判定该成功执行任务失败;或者

当所述celery模块的任务重试次数超出一预设重试阈值时,则判定该重试的任务失败。

优选的,所述配置模块还用于:解析系统新配置参数并与当前系统配置参数进行比较,如果发生变更就发送变更信号与变更内容给监控模块,等监控模块处理完成并返回成功后,更新配置文件,否则忽略此次变更。

优选的,所述系统配置文件中,包含system节、task节;

所述system节描述celery模块中的消息代理及后端处理;

所述task节用于描述任务。

优选的,所述监控模块在校验并执行配置模块发送的变更数据时,执行的相关操作包括:

add操作,首先检查任务执行函数是否存在,根据任务描述启动新的worker进程;以及

update操作,在worker空闲或完成任务时,杀死worker进程,再根据任务描述启动新的worker进程;以及

delete操作,杀死worker进程。

此外,本发明还提供了一种基于celery的可靠可配置任务装置,所述装置至少包括一处理器模块及存储器模块,所述处理器模块及存储器模块被配置为包含如上所述的基于celery的可靠可配置任务系统。

与现有技术相比,本方案是基于celery基础架构的新的设计,调整后的系统架构,支持更可靠的异步任务,支持已有任务的动态变更,包括任务的执行函数,执行方式,并发数目等等;支持任务的热插拔;扩展性强。

附图说明

图1为本发明实施例的系统结构图;

图2为celery模块相关部分的框架示意图;

图3为本发明实施例的负载均衡模块与任务队列的结构示意图。

具体实施方式

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

在一个具体的实施例中,结合图1所示,本发明方案的系统架构,可以通过以下方式来实现:

主要包含webapi(即网络接口模块),数据库,分配模块,配置模块,监控模块,celery模块和执行模块。

webapi提供用户访问接口,接口有任务和系统配置相关,提交任务和查询任务执行结果,修改系统配置与查询修改结果。

数据库用于记录用户操作,所有提交的任务,任务参数与执行状态等等。

celery部分的框架结构如图2所示。

celery模块的主要组件包括:

app,任务生产者。

beat,定时任务调度器。

worker,执行任务的消费者,调用执行模块完成任务。

broker,消息代理,接受任务生产者发送过来的任务消息,存进队列再按序分发给任务消费方。

backend,后端处理,用于任务处理完后保存状态信息和结果。

执行模块用于执行下发的具体任务内容,由celery模块中的worker触发执行。

分配模块会为每一类注册在celery系统上的task创建一个负载均衡,当web端收到提交任务请求后,分配模块会在数据库中创建一条记录,为任务分配唯一id并保存任务参数,记录任务下发时间,再由负载均衡调用celery的api把任务送入celerybroker中去,等任务执行结束时如果任务执行成功保存结果到数据库中并返回给用户,否则重新下发任务。

配置模块用于维护系统的配置文件,解析新配置参数并与当前系统配置进行比较,如果发生变更就发送信号与变更内容给监控模块,等监控模块处理完成返回成功后更新配置文件,否则忽略此次变更,返回没有变更的状态给用户。

在一个具体的实施方式中,系统配置可以采用由节、键、值组成的文件格式,系统配置文件中优选设置有system和task两个节。

以一个具体的实施例为例,system节可以如下设置,以主要描述celery的broker和backend。

[system]

broker=amqp://username:password@host//

backend=redis://host:port/section

在一个具体的实施方式中,task节可以设置如下,主要描述任务,一个任务为一行,键为任务名称,值为任务的执行信息,用|隔开,分别是:celeryworker个数|task任务执行函数模块(业务)|broker中队列个数|task并发执行方式和并发数目。为了便于维护与管理,在一个更为优选的实施方式中,系统中worker的个数与队列个数x保持一直,即worker能且只能监听在一个队列上,处理一种任务。

[task]

任务_1=1|celery.task.task_1|3|threads|20

任务_2=1|celery.task.task_1|1|gevent|10

如图3所示为以上task节所描述celery内部任务队列和worker对应的一种情况。

当涉及到系统配置发生变更时,在一个优选的实施方式中,基础的变更操作任务有:

新增任务,add任务_1=1|celery.task.task_1|4|threads|20

更新任务,update任务_1=1|celery.task.task_1|4|threads|20

删除任务,delete任务_1

add/update/delete是变更操作符,后面是变更内容即新的任务描述信息或删除任务的名称,为便于系统任务的统一调度和管理,在一个优选的实施方式中,任务格式与上述示例保持一致。

结合图3所示,监控模块主要负责:

1)在系统启动时检查并解析系统配置文件启动celeryworker。

2)系统运行中实时监控每个worker和beat的状态,占用资源的状态等,如果发生异常,如worker中task执行异常,workerhang住等,会杀死相应的进程并重启;如果worker进程退出也会自动重新启动。

3)校验格式并解析配置模块发来的变更,执行相关操作。

a.add操作,首先会检查任务执行函数模块是否存在,根据任务描述启动新的worker进程。

b.update操作,在worker空闲或完成任务时,杀死worker进程,再根据任务描述启动新的worker进程。

c.delete操作,杀死worker进程。

负载均衡在系统运行中,涉及以下内容工作:

基于本发明提出的上述系统的结构,本系统相应可实现基于预估任务执行时间的两种简单模式:

1)任务预估执行时间之间相差不多,例如可以设置一阈值,当不同任务的预估执行时间之差在阈值以下时,则认为上述的不同任务的预估执行时间差不多相同,则此时负载均衡可以采用轮询方式;

2)而当任务预估执行时间之差超过了预设的阈值,则认为上述的不同任务的预估执行时间不同,则对任务进行划分,划分的标准和类别可以基于不同的系统配置或者任务处理需求进行甚至,例如如设置为非常耗时任务/一般耗时任务/较少耗时任务等等,将耗时不同的任务放在不同的队列中。

对于上述第2)条,在一个优选的实施方式中,任务的队列个数配置与任务的划分类别数目可设置为相同,此外,根据需求,对于非常耗时的任务可以适当的增加并发量。

在系统执行中,对于任务的可靠性执行方面,本系统通过以下方式进行控制:

一个任务的生命周期划分为2个阶段,阶段一,任务由用户提交到进入celeryworker执行单元;阶段二,任务开始执行到完成。

在这两个阶段如果任务失败,只要任务信息被分配模块写入数据库中就能保证再次执行,直到任务成功,在一个优选的实施方式中,分配模块判定任务失败可以通过以下方式实现:

1)阶段一,同一队列中任务是顺序执行的,分配模块收到任务成功执行的返回信息时,用该任务的下发时间与相同队列中已经下发任务的下发时间进行对比(同一队列中的任务是顺序下发执行的),如果连续n个任务的下发时间都早于成功任务的,则认为该任务失败。对于预估时间不同的同类任务,3需要调整。

2)阶段二,celery模块内部提供了基础的任务重试机制,此时可以通过例如设置任务的重试次数等等作为判断的依据,当超出预设的重试次数后,任务仍然无法正常执行时,则可以认为任务失败。

此外,作为本发明的另外一种实现方式,本发明的技术方案还可以通过一种电子装置的方式实现,这一电子装置至少具有存储模块和处理器模块,优选的方式中,该电子装置还可以设置有与处理器模块、存储器模块相配合或者支持处理器模块、存储器模块正常运行的其他模块,上述的电子装置可以被配置成为包含本说明书提及的基于celery的可靠可配置任务系统,从而使得系统可以实现本发明提供的技术方案的各个基本功能。

取决于期望的配置,上述电子装置中的处理器模块可以是任何类型的处理,包括但不限于:微处理器(μp)、微控制器(μc)、数字信息处理器(dsp)或者它们的任何组合。处理器模块可以包括诸如一级高速缓存和二级高速缓存之类的一个或者多个级别的高速缓存、处理器核心和寄存器。示例的处理器核心可以包括运算逻辑单元(alu)、浮点数单元(fpu)、数字信号处理核心(dsp核心)或者它们的任何组合。示例的存储器控制器可以与处理器模块一起使用,或者在一些实现中,存储器控制器可以是处理器模块的一个内部部分。

取决于期望的配置,上述电子装置中的存储器模块可以是任意类型的存储器,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪存等)或者它们的任何组合。存储器模块可以包括操作系统、一个或者多个应用以及程序数据。在一些实施方式中,应用可以布置为在操作系统上利用程序数据进行操作。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

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

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