分布式定时任务调度系统的制作方法

文档序号:6520100阅读:182来源:国知局
分布式定时任务调度系统的制作方法
【专利摘要】本发明提供了一种分布式定时任务调度方法,包括如下步骤:a)任务分发者系统启动,监听任务提交者系统的提交任务和任务执行者系统中的任务执行者的注册;b)所述任务执行者系统启动,自动向所述任务分发者系统注册;c)所述任务提交者系统向所述任务分发者系统提交任务;d)所述任务分发者系统收到任务后,通知所述任务执行者系统中的已注册的与所述任务对应的任务执行者来取走所述任务;e)所述与所述任务对应的任务执行者取走所述任务并执行所述任务。利用本发明的分布式定时任务调度系统具有管理简单、操作方便等特点,能够解决程序数目较多,且管理混乱等问题。
【专利说明】分布式定时任务调度系统
【技术领域】
[0001]本发明涉及客户端/服务器系统的任务管理,特别涉及一种基于客户端/服务器系统分布式定时任务调度系统。
【背景技术】
[0002]客户端/服务器结构(即Client/Server结构,简称C/S结构)是计算机领域中熟知的一种客户机和服务器结构。这是一种软件系统体系结构,可以充分利用客户机和服务器两端的硬件环境的优势,将任务合理分配到客户机(Client)端和服务器(Server)端来实现,从而降低了系统的通讯开销。服务器端通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如ORACLE、SYBASE、InfORMix或SQL Server。客户端需要安装专用的客户端软件。C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。而且,数据的储存管理功能较为透明。目前大多数应用软件系统都是Client/Server形式的两层结构。
[0003]在客户端/服务器结构的系统中,经常会有许多需要重复执行的任务或程序。如:生成周报的程序需要每周执行一次、发送邮件的程序需要每天凌晨3点执行一次、分析日志的程序需要每天凌晨I点执行一次、信息采集的程序需要每两小时执行一次等等。还有一些程序需要在特定的情况下手动触发执行。
[0004]这些以周期性重复执行的任务或程序具有如下一些相同点:需要重复执行、需要定时执行、编写程序时需要考虑定时逻辑等。如果在客户端/服务器结构的系统中这样的任务或程序数目较多,就会使得客户端/服务器结构的系统的管理十分复杂混乱,容易出错,造成系统不稳定等问题。
[0005]在现有技术中,为了解决这类重复执行的任务或程序的分配和管理问题,可以将这些需要定时重复执行的任务部署在一台服务器上,那么这个定时任务就是整个系统的单点。然而,在单点模式下如果这台服务器出现故障的话会影响整个服务。对于可以冗余的任务(重复运行不影响服务),也可以部署在多台服务器上,让它们同时执行,这样就可以很简单的避免单点。但是如果任务不允许冗余,最多只能有一台服务器执行任务,会产生互斥任务的单点问题。
[0006]因此,需要一种能够解决定时重复执行的任务的管理问题,以达到管理简单,操作方便的目的分布式定时任务调度方法和系统。

【发明内容】

[0007]本发明的目的是提供一种分布式定时任务调度方法,包括如下步骤:a)任务分发者系统启动,监听任务提交者系统的提交任务和任务执行者系统中的任务执行者的注册;b)所述任务执行者系统启动,自动向所述任务分发者系统注册;c)所述任务提交者系统向所述任务分发者系统提交任务;d)所述任务分发者系统收到任务后,通知所述任务执行者系统中的已注册的与所述任务对应的任务执行者来取走所述任务;e)所述与所述任务对应的任务执行者取走所述任务并执行所述任务。
[0008]优选地,还包括关闭所述任务分发者系统的步骤如下:h)所述任务提交者系统向任务分发者系统发送表示关闭任务分发者系统的命令;i)所述任务分发者系统停止接受任务;j)所述任务分发者系统向所述任务执行者系统发送任务集群命令;k)所述任务执行者系统将现有任务转入集群;1)所述任务执行者系统将包括现有任务的集群返回所述任务分发者;m)所述任务分发者系统关机。
[0009]优选地,在步骤b中,所述任务提交者系统向所述任务分发者系统注册的信息包括:每个所述任务执行者的功能信息、唯一标示、最大负载、及输入输出参数。
[0010]优选地,在步骤C中,所述任务提交者系统定时提交任务。
[0011]优选地,在步骤e之后,向所述任务分发者系统返回包括表示任务执行成功或任务异常的信息。
[0012]优选地,从步骤a至步骤m都采用Gearman传输协议,请求和响应被封装成二进制数据包,所述二进制数据包包含一个文件头以及数据内容。
[0013]优选地,所述二进制数据包仅包含数据内容。
[0014]优选地,所述文件头的格式如下:所述文件头为12个Byte,由4byte的MagicCode、4byte的消息类型和4byte的数据大小信息组成。
[0015]优选地,所述任务提交者系统包括2个任务提交者,所述任务分发者系统包括2个任务分发者。
[0016]优选地,所述任务提交者系统具有用户界面接口。
[0017]利用本发明的分布式定时任务调度系统具有管理简单、操作方便等特点,能够解决程序数目较多,且管理混乱等问题。
【专利附图】

【附图说明】
[0018]参考随附的附图,本发明更多的目的、功能和优点将通过本发明实施方式的如下描述得以阐明,其中:
[0019]图1示意性地示出了本发明的分布式定时任务调度系统的系统框图;
[0020]图2示意性地示出了本发明的分布式定时任务调度系统的方法流程图。
[0021]图3示意性地示出了本发明的分布式定时任务调度系统的关闭服务器的方法流程图。
【具体实施方式】
[0022]通过参考示范性实施例,本发明的目的和功能以及用于实现这些目的和功能的方法将得以阐明。然而,本发明并不受限于以下所公开的示范性实施例;可以通过不同形式来对其加以实现。说明书的实质仅仅是帮助相关领域技术人员综合理解本发明的具体细节。
[0023]在下文中,将参考附图描述本发明的实施例。在附图中,相同的附图标记代表相同或类似的部件,或者相同或类似的步骤。
[0024]图1示意性地示出了本发明的分布式定时任务调度系统的系统框图。本发明的分布式定时任务调度系统100包括3个子系统:任务提交者系统110、任务分发者系统120和任务执行者系统130。各子系统之间基于自定义协议(基于TCP/IP网络通信协议)通信。[0025]下面关于自定义协议进行解释。本系统的自定义协议的通信规则步骤为:
[0026]步骤1,任务分发者系统120启动,监听任务提交者系统110的提交任务和任务执行者系统130中的任务执行者的注册;
[0027]步骤2,任务执行者系统130启动,自动向任务分发者系统120注册,告知自己能做的哪些任务和自己的编号;
[0028]步骤3,任务提交者系统110向任务分发者系统120提交任务;
[0029]步骤4,任务分发者系统120收到后,通知任务执行者系统130中的已注册的能做该任务的任务执行者来取走任务;
[0030]步骤5,其中一个任务执行者取走任务,执行,并告知任务分发者系统120完成或异常。
[0031]以上五个步骤每个步骤都采用的Gearman传输协议,请求和响应被封装成二进制数据包,该二进制数据包包含一个文件头以及数据内容。文件头格式如下:文件头为12个Byte,分别有4byte的Magic Code、4byte的消息类型和4byte的数据大小信息组成。优选地,该二进制数据包也可以仅包含数据内容。
[0032]例如:MagicCode 分别为,〃\0REQ〃 或 〃\0RES〃,〃\0REQ〃 代表请求,〃\0RES〃 代表响应。
[0033]优选地,本系统将三个子系统,即任务提交者系统110、任务分发者系统120,以及任务执行者系统130完全解耦。从而方便系统的扩展与升级,避免单点故障,提高工作效率。
[0034]该自定义协议优选设置为,通信内容以命令+数据的方式在各子系统间传送。例如,在任务执行者系统130启动时,会向任务分发者系统120注册,使用SET_CLIENT_ID命令,并加上自己的ID号发送给任务分发者端。此处的向任务分发者系统120注册的含义为,将任务执行者系统130中的各任务执行者能够处理的任务以及各任务执行者的编号告知任务分发者。
[0035]任务提交者系统110具有用户界面接口,例如以web方式呈现的交互式页面。用户或管理员可以通过任务提交者系统110发起添加新任务,任务提交者系统110会将任务数据存入数据库113。当需要提取任务数据时,任务提交者系统110会从数据库113取出任务数据,并按时将任务数据提交至任务分发者系统120。
[0036]优选地,在任务即将执行之前,任务提交者系统110提前一定时间地将任务数据加载到内存,以实现准时投递。例如,若某任务需要在10:00执行,则任务提交者系统110在9:50将需要执行的任务数据从硬盘加载至内存,并将该任务数据加入延时队列,在10:00时,任务数据会从延迟队列被提取至任务提交者系统110,从而能够在10:00准时地向任务分发者系统120提交任务数据。延时队列是一种具有定时器和触发器的队列,从而能够按时传送数据。
[0037]作为具有用户界面接口的任务提交者系统110,在需要的情况下,能够显示从任务分发者系统120返回的包含表示任务执行成功与否的信息。例如,当任务分发者系统120接收到从任务执行者系统130传来的任务失败的信息时,任务分发者系统120会向任务提交者系统110发送显示任务失败的提示信息以及报警命令。此时,任务提交者系统110将会通过用户界面接口,将任务失败的提示信息显示出来。又例如,在进行任务分发者系统120的关闭操作时,任务提交者系统110接收从任务分发者系统返回的执行结果,并将该执行结果通过用户界面接口显示出来。
[0038]任务分发者系统120接收从任务提交者系统110提交的任务数据,并将任务数据分发至任务执行者系统130。在任务分发者系统120中的任务分发者都具有任务调度的功能。当任务执行者系统130启动后会向任务分发者系统120注册自己的信息,比如任务执行者的唯一标示,最大负载,输入输出参数等。任务分发者在接受到任务提交者提交上来的任务后,会根据任务的唯一标示找到可以接受该任务的任务执行者。
[0039]根据本发明的分布式定时任务调度系统100优选各具有至少两个任务提交者和任务分发者,这样可以防止单点故障。例如由某个机器宕机而引起系统服务中断就属于单点故障。如图1所示,任务提交者系统Iio至少包括第一任务提交者111和第二任务提交者112。任务分发者系统120至少包括第一任务分发者121和第二任务分发者122。
[0040]当有某任务需要提交时,在正常的工作状态下,该任务可以由任务提交者系统110中的任意一个任务提交者(例如任务提交者111)随机地向任务分发者系统120中的任意一个任务分发者(例如任务分发者121)提交;若有任务提交者(例如任务提交者111)宕机,则该任务会由任务提交者112随机地向任务分发者系统120中的任意一个任务分发者(例如任务分发者121)提交;若有任务分发者(例如任务分发者121)宕机,则任务提交者系统110将该任务向任务分发者系统120中的任务分发者122提交。另外,任务提交者系统110中的任务提交者以及任务分发者系统120中的任务分发者的个数可以大于两个,但考虑到成本及效果的平衡,2个任务提交者及任务分发者是最合适的。
[0041]当任务执行者发生单点故障时,例如任务执行者系统130的某台机器宕机时,任务分发者系统120会检测到该宕机的机器的心跳停止,因此不会把任务发送给该机器的任务执行者来执行任务。
[0042]任务执行者系统130处理从任务分发者系统120接收到的任务数据。在任务执行者系统中可以至少包含一个任务执行者,图1中仅示意性地示出了第一任务执行者131、第二任务执行者132和第n任务执行者139。为了保证系统效率,相同任务的任务执行者可以有多个。如果提交的任务较多,则任务分发者系统120默认将任务平均随机分配给任务执行者系统130中的多个任务执行者来执行。
[0043]在各子系统之间,使用自定义的序列化实现数据在传输上的编码的与解码。每个任务有自己所需的参数,这些参数在任务提交者端序列化为字节,发送到任务分发者端,再分发到任务执行者端,任务执行者解析,并使用。
[0044]下面举2个自定义的序列化的例子,任务执行者系统130中的某个任务执行者若准备好执行任务时,则向任务分发者系统120发送一个协议包,表示随时可以接受任务,该协议包如下:
[0045]Magic: REQ
[0046]Type: CAN—DO
[0047]任务执行者系统130中的某个任务执行者若不能接受新任务时,则向任务分发者系统120发送一个协议包,该协议包如下:
[0048]Magic: REQ
[0049]Type: CANT—DO[0050]图2示意性地示出了本发明的分布式定时任务调度系统的方法流程图。如图2所示,首先,任务分发者系统120启动,接收来自任务执行者系统130的注册,从而任务分发者系统120得到任务执行者系统130中每个任务执行者能够处理的任务以及其编号(205)。若接收到任务提交者系统110提交的任务(210),任务分发者系统120将会根据任务的类型找到能够处理该任务的相应的任务执行者(215)。然后将该任务分发给任务执行者系统110中能够处理该任务的任务执行者(220)。在接收到任务之后,被分配任务的任务执行者处理该任务(225)。
[0051]优选地,在步骤225之后存在以下步骤,任务执行者将包含表示执行成功与否的结果返回给任务分发者(226),任务分发者判断该执行是否成功(227),若成功则将包含表示执行成功与否的结果经由任务分发者系统120及任务提交者系统110返回至数据库
(228),若不成功则通知任务发布者进行消息报警,并通知任务提交者系统重新提交任务
(229)。
[0052]优选地,当需要关闭任务分发者系统时(例如任务分发者重启或升级时),通过使用自定义命令实现任务分发者系统关机前的剩余任务处理,从而防止现有任务的丢失。
[0053]图3示意性地示出了本发明的分布式定时任务调度系统的关闭服务器的方法流程图。如图3所不:
[0054]当需要关闭任务分发者系统120时,通过任务提交者系统110向任务分发者系统120发送KILL_SERVER命令,该命令为使任务分发者系统120关机的命令(305),收到命令的任务分发者系统120首先停止接受新任务(310),并向任务执行者系统130发送现有任务的集群命令。集群命令的目的是通知任务执行者系统130收集现有任务并将其反馈给任务分发者系统120,当任务分发者系统120再次开机时就可以重新分发本次集群收集到的现有任务,从而避免因任务分发者系统120关机导致现有任务的丢失。现有任务是指任务分发者系统120正在向任务执行者系统130分发的任务,以及任务执行者系统130正在处理的任务(315)。收到命令的任务执行者系统130将现有任务转入集群(320),并将集群返回任务分发者系统120(325),然后任务分发者系统120关机(330)。
[0055]当需要关闭任务分发者系统120时,例如,可以由管理员通过任务提交者系统110向任务分发者系统120发送KILL_SERVER命令。但是不限于,例如也可以通过在向任务提交者系统110设置定时指令来向任务分发者系统120发送KILL_SERVER命令。
[0056]优选地,在步骤255之后存在将关闭任务分发者系统的执行结果,例如是否成功关闭,发送至任务提交者。
[0057]利用本发明的分布式定时任务调度系统具有管理简单、操作方便等特点,能够解决程序数目较多,且管理混乱等问题。
[0058]结合这里披露的本发明的说明和实践,本发明的其他实施例对于本领域技术人员都是易于想到和理解的。说明和实施例仅被认为是示例性的,本发明的真正范围和主旨均由权利要求所限定。
【权利要求】
1.一种分布式定时任务调度方法,其特征在于,包括如下步骤: a)任务分发者系统启动,监听任务提交者系统的提交任务和任务执行者系统中的任务执行者的注册; b)所述任务执行者系统启动,自动向所述任务分发者系统注册; c)所述任务提交者系统向所述任务分发者系统提交任务; d)所述任务分发者系统收到任务后,通知所述任务执行者系统中的已注册的与所述任务对应的任务执行者来取走所述任务; e)所述与所述任务对应的任务执行者取走所述任务并执行所述任务。
2.根据权利要求1所述的方法,其特征在于,还包括关闭所述任务分发者系统的步骤如下: h)所述任务提交者系统向任务分发者系统发送表示关闭任务分发者系统的命令; i)所述任务分发者系统停止接受任务; j)所述任务分发者系统向所述任务执行者系统发送任务集群命令; k)所述任务执行者系统将现有任务转入集群; I)所述任务执行者系统将包括现有任务的集群返回所述任务分发者; m)所述任务分发者系统关机。
3.根据权利要求1所述的方法,其特征在于,在步骤b中,所述任务提交者系统向所述任务分发者系统注册的信息包括:每个所述任务执行者的功能信息、唯一标示、最大负载、及输入输出参数。
4.根据权利要求1所述的方法,其特征在于,在步骤c中,所述任务提交者系统定时提交任务。
5.根据权利要求1所述的方法,其特征在于,在步骤e之后,向所述任务分发者系统返回包括表示任务执行成功或任务异常的信息。
6.根据权利要求1和2所述的方法,其特征在于,从步骤a至步骤m都采用Gearman传输协议,请求和响应被封装成二进制数据包,所述二进制数据包包含一个文件头以及数据内容。
7.根据权利要求6所述的方法,其特征在于,所述二进制数据包仅包含数据内容。
8.根据权利要求6所述的方法,其特征在于,所述文件头的格式如下:所述文件头为12个Byte,由4byte的Magic Code、4byte的消息类型和4byte的数据大小信息组成。
9.根据权利要求1所述的方法,其特征在于,所述任务提交者系统包括2个任务提交者,所述任务分发者系统包括2个任务分发者。
10.根据权利要求1所述的方法,其特征在于,所述任务提交者系统具有用户界面接□。
【文档编号】G06F9/46GK103577256SQ201310593626
【公开日】2014年2月12日 申请日期:2013年11月21日 优先权日:2013年11月21日
【发明者】廖禄平, 朱廷发, 蔡敏, 何正军 申请人:五八同城信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1