一种分布式定时任务处理系统、方法及相关装置与流程

文档序号:26806131发布日期:2021-09-29 02:34阅读:121来源:国知局
一种分布式定时任务处理系统、方法及相关装置与流程

1.本技术涉及信息处理技术领域,尤其涉及一种分布式定时任务处理系统、方法及相关装置。


背景技术:

2.随着后台业务越来越趋于复杂化,诸如数据处理、报表处理等离线任务所需的定时脚本越来越多。目前大多是采用多台服务器来处理任务,其原理一般是通过程序收集任务脚本,然后分配给不同的服务器去执行。然而,对多台服务器进行管理较为复杂,需要给每台服务器配置crontab文件,此外,也很难保证分配给各台服务器的脚本数量均衡。


技术实现要素:

3.为克服相关技术中存在的问题,本技术提供一种分布式定时任务处理系统、方法及相关装置,能够简化对多服务器的管理复杂度,并使各服务器负载均衡。
4.本技术第一方面提供一种分布式定时任务处理系统,包括:任务管理装置、推送服务集群和执行服务集群;其中:
5.所述任务管理装置用于接收待执行的至少一个定时任务;
6.所述推送服务集群用于扫描所述任务管理装置,判断当前时刻是否存在需要执行的目标定时任务,若存在,将所述目标定时任务的任务标识推送至所述执行服务集群;
7.所述执行服务集群用于获取所述推送服务集群推送的任务标识,从所述任务管理装置获取与所述任务标识对应的定时任务并执行。
8.优选的,所述推送服务集群包括多台推送服务器和数据库,其中:
9.所述多台推送服务器分别用于扫描所述任务管理装置,判断当前时刻是否存在需要执行的目标定时任务,若存在,将所述目标定时任务的任务标识写入所述数据库中,若写入成功,将所述目标定时任务的任务标识推送至所述执行服务集群。
10.优选的,所述多台推送服务器能够同时从所述任务管理装置获取所述目标定时任务的任务标识,并由其中最先获取到所述任务标识的推送服务器将所述任务标识推送至所述执行服务集群。
11.优选的,所述数据库为redis数据库,用于存储写入成功的任务标识,并为写入成功的任务标识配置分布式锁。
12.优选的,所述多台推送服务器分别扫描所述任务管理装置,判断当前时刻是否存在需要执行的目标定时任务的方式包括:
13.所述多台推送服务器分别利用hash算法计算自身需要处理的任务标识,扫描所述任务管理装置,从所述自身需要处理的任务标识对应的定时任务中,判断当前时刻是否存在需要执行的目标定时任务。
14.优选的,所述执行服务集群包括多台执行服务器和消息队列,其中:
15.所述消息队列用于存储所述推送服务集群推送的任务标识,并将存储的任务标识
分发给所述多台执行服务器;
16.所述多台执行服务器分别用于获取任务标识,从所述任务管理装置获取与所述任务标识对应的定时任务并执行。
17.优选的,所述多台执行服务器分别还用于当执行定时任务完毕后,向所述消息队列发送确认信息,所述确认信息用于指示所述定时任务已成功执行完毕;
18.所述消息队列还用于在接收到所述确认信息后,删除所述定时任务的任务标识。
19.优选的,所述消息队列还用于在未接收到所述确认信息时,将所述定时任务的任务标识重新进行分发。
20.优选的,所述执行服务集群还用于当执行定时任务完毕后,释放所述定时任务的任务标识对应的分布式锁。
21.优选的,所述任务管理装置包括任务采集平台和任务管理中心,其中:
22.所述任务采集平台用于采集待执行的至少一个定时任务,并将所述至少一个定时任务发送至所述任务管理中心进行保存;
23.所述任务管理中心用于存储所述至少一个定时任务。
24.本技术第二方面提供一种分布式定时任务处理方法,所述方法应用于分布式定时任务处理系统,所述方法包括:
25.接收待执行的至少一个定时任务;
26.判断当前时刻所述至少一个定时任务中是否存在需要执行的目标定时任务;
27.若存在,获取所述目标定时任务并执行。
28.优选的,所述分布式定时任务处理系统包括任务管理装置、推送服务集群和执行服务集群,其中:
29.所述任务管理装置接收待执行的至少一个定时任务;
30.所述推送服务集群扫描所述任务管理装置,判断当前时刻是否存在需要执行的目标定时任务,若存在,将所述目标定时任务的任务标识推送至所述执行服务集群;
31.所述执行服务集群获取所述推送服务集群推送的任务标识,从所述任务管理装置获取与所述任务标识对应的定时任务并执行。
32.优选的,所述推送服务集群包括多台推送服务器和数据库,所述推送服务集群扫描所述任务管理装置,判断当前时刻是否存在需要执行的目标定时任务,若存在,将所述目标定时任务的任务标识推送至所述执行服务集群,包括:
33.所述多台推送服务器分别扫描所述任务管理装置,判断当前时刻是否存在需要执行的目标定时任务,若存在,将所述目标定时任务的任务标识写入所述数据库中,若写入成功,将所述目标定时任务的任务标识推送至所述执行服务集群。
34.优选的,所述多台推送服务器分别扫描所述任务管理装置,判断当前时刻是否存在需要执行的目标定时任务,包括:
35.所述多台推送服务器分别利用hash算法计算自身需要处理的任务标识,扫描所述任务管理装置,从所述自身需要处理的任务标识对应的定时任务中,判断当前时刻是否存在需要执行的目标定时任务。
36.优选的,所述执行服务集群包括多台执行服务器和消息队列,所述执行服务集群获取所述推送服务集群推送的任务标识,从所述任务管理装置获取与所述任务标识对应的
定时任务并执行,包括:
37.所述消息队列存储所述推送服务集群推送的任务标识,并将存储的任务标识分发给所述多台执行服务器;
38.所述多台执行服务器分别获取任务标识,从所述任务管理装置获取与所述任务标识对应的定时任务并执行。
39.优选的,所述方法还包括:
40.所述多台执行服务器分别当执行定时任务完毕后,向所述消息队列发送确认信息,所述确认信息用于指示所述定时任务已成功执行完毕;
41.所述消息队列在接收到所述确认信息后,删除所述定时任务的任务标识。
42.优选的,所述方法还包括:
43.所述消息队列在未接收到所述确认信息时,将所述定时任务的任务标识重新进行分发。
44.优选的,所述任务管理装置包括任务采集平台和任务管理中心,所述任务管理装置接收待执行的至少一个定时任务,包括:
45.所述任务采集平台采集待执行的至少一个定时任务,并将所述至少一个定时任务发送至所述任务管理中心进行保存;
46.所述任务管理中心存储所述至少一个定时任务。
47.本技术第三方面提供一种分布式定时任务处理装置,包括:
48.接收单元,用于接收待执行的至少一个定时任务;
49.判断单元,用于判断当前时刻所述至少一个定时任务中是否存在需要执行的目标定时任务;
50.执行单元,用于当所述判断单元判断出存在所述目标定时任务时,从所述接收单元获取所述目标定时任务并执行。
51.本技术提供的技术方案,分布式定时任务处理系统可以由任务管理装置、推送服务集群和执行服务集群组成,其中,任务管理装置可以接收并存储待执行的至少一个定时任务,推送服务集群扫描任务管理装置,在扫描到有当前时刻需要执行的目标定时任务时,将目标定时任务的任务标识推送给执行服务集群,以使执行服务集群从任务管理装置获取该任务标识对应的定时任务并执行。本技术的技术方案,推送服务集群直接从任务管理装置中扫描定时任务,并将当前需要执行的定时任务分发给执行服务集群去执行,相较于传统方法,本技术无需用户手动为每台服务器配置crontab文件,简化了多服务器管理的复杂度。此外,通过任务分发机制,能够使各服务器负载趋于均衡化。
52.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
53.通过结合附图对本技术示例性实施方式进行更详细的描述,本技术的上述以及其它目的、特征和优势将变得更加明显,其中,在本技术示例性实施方式中,相同的参考标号通常代表相同部件。
54.图1是本技术实施例示出的一种分布式定时任务处理系统的结构示意图;
55.图2是本技术实施例示出的另一种分布式定时任务处理系统的结构示意图;
56.图3是本技术实施例示出的一种分布式定时任务处理方法的流程示意图;
57.图4是本技术实施例示出的另一种分布式定时任务处理方法的流程示意图;
58.图5是本技术实施例示出的又一种分布式定时任务处理方法的流程示意图;
59.图6是本技术实施例示出的一种分布式定时任务处理装置的结构示意图;
60.图7是本技术实施例示出的另一种分布式定时任务处理装置的结构示意图。
具体实施方式
61.下面将参照附图更详细地描述本技术的优选实施方式。虽然附图中显示了本技术的优选实施方式,然而应该理解,可以以各种形式实现本技术而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本技术更加透彻和完整,并且能够将本技术的范围完整地传达给本领域的技术人员。
62.在本技术使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
63.应当理解,在本技术的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
64.以下结合附图详细描述本技术实施例的技术方案。
65.请参阅图1,本技术实施例提供了一种分布式定时任务处理系统。如图1所示,该系统至少可以包括:任务管理装置10、推送服务集群20和执行服务集群30;其中:
66.任务管理装置10用于接收待执行的至少一个定时任务;
67.推送服务集群20用于扫描任务管理装置10,判断当前时刻是否存在需要执行的目标定时任务,若存在,将目标定时任务的任务标识推送至执行服务集群30;
68.执行服务集群30用于获取推送服务集群20推送的任务标识,从任务管理装置10获取与该任务标识对应的定时任务并执行。
69.本技术实施例中,本系统是一种基于消息总线的分布式定时任务处理系统。任务管理装置10可以接收并存储有一个或多个等待执行的定时任务,这些定时任务可以是用户输入的,也可以是从网络端获取的。任务管理装置10可以为每一个定时任务分配任务标识,任务标识可以看作为用来识别定时任务的一种记号,每一个定时任务的任务标识都是唯一的,有别于其他定时任务的任务标识。任务标识可以是数字、字母、符号和文字的其中一种或几种的组合构成的。
70.其中,一个定时任务可以由执行时间和执行命令组成。例如,任务管理装置10中的一个定时任务为“每天上午9点发送前一天的所有数据库慢查询sql语句邮件给相关开发人员”,其中,“每天上午9点”为执行时间,“发送前一天的所有数据库慢查询sql语句邮件给相关开发人员”为执行命令;又如,任务管理装置10中的一个定时任务为“每分钟发送一次代码错误日志邮件给相关开发人员”,其中,“每分钟”为执行时间,“发送一次代码错误日志邮件给相关开发人员”为执行命令。
71.一个定时任务的执行时间可以为循环时间,例如,每秒/分/时/日/月/周执行一
次。一个定时任务的执行时间也可以为具体时间(单次执行),例如,2020年9月2日10:00:00执行。一个定时任务的执行时间还可以为循环时间+具体时间,例如,每月1号00:00:00执行;又如,每周三下午16:00:00执行。
72.本技术实施例中,推送服务集群20可以分别与任务管理装置10、执行服务集群30进行通信连接。推送服务集群20可以扫描任务管理装置10,并判断当前时刻任务管理装置10中是否存在需要执行的目标定时任务,如果不存在,则继续扫描;如果存在,则将目标定时任务的任务标识推送给执行服务集群30,以使执行服务集群30执行对应的定时任务。其中,同一时刻需要执行的定时任务可能有一个或多个,执行服务集群30可以开启多个线程同步执行多个目标定时任务。
73.在一可选的实施方式中,如图2所示,推送服务集群20可以包括多台推送服务器21和数据库22,其中,多台推送服务器21可以分别用于扫描任务管理装置10,判断当前时刻是否存在需要执行的目标定时任务,若存在,将目标定时任务的任务标识写入数据库22中,若写入成功,将目标定时任务的任务标识推送至执行服务集群30。
74.具体的,推送服务器21可以设置两台或两台以上,如3台、4台、6台、8台、10台或其他值等。当其中一台或几台推送服务器21出现故障(如死机、线路故障、网络不稳定、重启等等),可以采用其他正常运行的推送服务器21来继续完成推送工作,能够克服单点故障。
75.每一台推送服务器21均可以周期性的扫描任务管理装置10,以查询是否有目标定时任务的执行时间与当前时刻相符,如果没有,则继续进行扫描;如果有,则将该目标定时任务的任务标识写入数据库22,若写入数据库22成功,则推送服务器21可以将该任务标识推送至执行服务集群30;若写入数据库22失败,则推送服务器21可以丢弃该任务标识。
76.多台推送服务器21能够同时从任务管理装置10获取目标定时任务的任务标识,并由其中最先获取到任务标识的推送服务器21将该任务标识推送至执行服务集群30。
77.具体的,同一时刻需要执行的目标定时任务可能有一个或多个,有可能多台推送服务器21扫描到同一目标定时任务,并将该目标定时任务的任务标识均写入数据库22。数据库22可以根据各推送服务器21写入该任务标识的先后顺序,保存最先的那台推送服务器21写入的该任务标识,并由该台推送服务器21将该任务标识推送至执行服务集群30,而其他推送服务器21不能重复在数据库22中成功写入该任务标识,进而无法将该任务标识再次推送至执行服务集群30。这样能够防止同一任务标识被重复推送,进而防止同一任务被重复执行。
78.举例来说,假设任务标识1同时被推送服务器a、b、c三台服务器写入数据库22,数据库22在收到推送服务器a写入的任务标识1时,可以查询该任务标识1是否已经存在,如果不存在,可以表明数据库22中还未存储该任务标识1,此时,数据库22可以保存该任务标识1,并向推送服务器a反馈写入成功的回执信息,以便推送服务器a可以将该任务标识1推送至执行服务集群30。此外,数据库22在收到推送服务器b和c写入的任务标识1时,将会查询到该任务标识1已经存在,此时,数据库22可以向推送服务器b和c反馈写入失败的回执信息,以便推送服务器b和c将任务标识1丢弃,避免任务标识1被重复推入执行服务集群30。
79.可选的,数据库22可以为redis数据库,用于存储写入成功的任务标识,并为写入成功的任务标识配置分布式锁。
80.其中,redis数据库在同一时刻可以接收多台推送服务器21写入的不同的任务标
识,并分别为写入成功的任务标识分配其对应的分布式锁。
81.可以理解的是,数据库22也可以为其他能够实现分布式锁的数据库,如zookpper数据库等,这里不作唯一限定。
82.在一可选的实施方式中,多台推送服务器21分别扫描任务管理装置10,判断当前时刻是否存在需要执行的目标定时任务的方式可以包括:
83.多台推送服务器21分别利用hash算法计算自身需要处理的任务标识,扫描任务管理装置10,从自身需要处理的任务标识对应的定时任务中,判断当前时刻是否存在需要执行的目标定时任务。
84.具体的,为了保证各台推送服务器21的负载均衡,每台推送服务器21均可以利用hash算法计算自身所需要处理的任务标识,从而可以从任务管理装置10中有针对性的扫描自身需要负责的任务标识,进而有针对性的推送任务标识。推送服务器21可以利用自己的服务器名称或身份标识来求得对应的hash值,根据hash值来确定自身需要处理的任务标识,例如取hash值的第一位或中间位或最后一位数值来关联自身需要处理的任务标识。
85.举例来说,当某一台推送服务器21计算得到的hash值的最后一位为1,则该推送服务器21对应需要处理的任务标识的尾号也为1,即任务标识1、11、21、31、41
……
;当某一台推送服务器21计算得到的hash值的最后一位为9,则该推送服务器21则对应需要处理的任务标识的尾号也为9,即任务标识9、19、29、39、49
……

86.可选的,两台或两台以上的推送服务器21所需处理的任务标识可以是相同的,其好处在于,当某一台推送服务器因故障而无法继续推送所需处理的任务标识时,可以由其他推送服务器继续推送其所需处理的任务标识,避免任务标识无法被正常推送,而导致对应的任务无法被执行。例如,推送服务器a和b所需处理的任务标识的尾号均为3,当推送服务器a在推送任务标识3时,推送服务器b可以推送任务标识13。当推送服务器a突然宕机,其正在推送的任务标识3可以在推送服务器b推送完任务标识13后继续由推送服务器b来推送,以防止任务标识3无法被正常推送,而导致其对应的定时任务无法被成功执行。
87.可选的,每一台推送服务器21可以周期性地扫描任务管理装置10,扫描周期可以为1秒、2秒、5秒、1分钟、5分钟或其他值。
88.具体的,定时任务的执行时间可以精确到分钟,也可以精确到秒钟。当执行时间精确到分钟时,推送服务器21可以每分钟扫描一次任务管理装置10;当执行时间精确到秒钟时,推送服务器21可以每秒钟扫描一次任务管理装置10。
89.可选的,当上述至少一个定时任务中的每一个定时任务的执行时间精确到秒时,多台推送服务器21可以分别以每秒钟1次的频率扫描任务管理装置10。
90.具体的,可以采用golang语言的time包的tick机制来实现秒级定时任务,即实现一个秒级定时器。推送服务器21基于golang开发的秒级定时任务系统程序,该程序可以每秒钟扫描一次任务管理装置10。由于传统方法一般都是配置crontab文件,而crontab时间只能精确到分,因此这里采用秒级定时任务能够解决传统crontab时间维度只能到分的痛点。
91.在一可选的实施方式中,如图2所示,执行服务集群30可以包括多台执行服务器31和消息队列32,其中:
92.消息队列32用于存储推送服务集群20推送的任务标识,并将存储的任务标识分发
给多台执行服务器31;
93.多台执行服务器31分别用于获取任务标识,从任务管理装置10获取与该任务标识对应的定时任务并执行。
94.具体的,消息队列32可以接收不同推送服务器21推送来的不同任务标识,并按照接收时间的先后顺序为各任务标识进行排序,可以采用先入先出的机制,将任务标识分发给各执行服务器31。
95.执行服务器31可以设置两台或两台以上,如3台、4台、5台、6台、8台或其他值等。当其中一台或几台执行服务器31出现故障,可以采用其他正常运行的执行服务器31来继续执行任务,从而能够克服单点故障。
96.每一台执行服务器31均可以采用异步采集程序,多线程去监听消息队列32,当监听到消息时,从该消息中获取任务标识,并在任务管理装置10中获取对应的定时任务并执行。其中,异步采集程序可以使用golang语言来编写,开启多个goroutine监听消息队列32,充分利用执行服务器31的cpu资源,提高执行效率。此外,每一台执行服务器31在执行定时任务时,可以把任务执行结果存入日志数据库中,以便相关开发人员可以及时查看。另外,如果任务执行失败,对应的执行服务器31可以发送邮件给相关开发人员,以告知任务执行失败结果及其原因,以便开发人员可以及时处理。
97.在一可选的实施方式中,多台执行服务器31分别还可以用于当执行定时任务完毕后,向消息队列32发送确认信息,该确认信息可以用于指示该定时任务已成功执行完毕;
98.相应的,消息队列32还可以用于在接收到该确认信息后,删除该定时任务的任务标识。
99.具体的,为了防止任务丢失,消息队列32可以采用确认(ack)机制,在每一执行服务器31执行完一次任务后,需要向消息队列32反馈确认信息,以告知消息队列32任务已成功执行完毕,使得消息队列32可以将任务对应的任务标识从队列中删除,不仅可以腾出空间给后续的任务标识,而且还可以防止消息队列32将该任务标识再分发给其他执行服务器31,导致任务被重复执行。其中,消息队列32可以是rabbitmq消息队列,利用它的ack机制,可以防止任务丢失,并且利用它的公平分发模式,可以防止队列中消息的挤压,保证各执行服务器31负载均衡,还可以使得多台执行服务器31同时执行任务而任务不会重复。可以理解的是,消息队列32还可以是其他支持ack机制的消息队列,如activemq,这里不作唯一限定。
100.在一可选的实施方式中,消息队列32还可以用于在未接收到该确认信息时,将该定时任务的任务标识重新进行分发。
101.具体的,如果正在执行任务的执行服务器31突然发生故障,则无法继续执行任务,也无法向消息队列32反馈信息。消息队列32可以预先设置一个定时,当分发任务后预设时间内未收到执行服务器31发送的确认信息,则消息队列32可以将该任务的任务标识重新分发给其他执行服务器31,从而有效防止任务丢失。也即是说,当某台执行服务器故障,它正在执行或者即将准备执行的任务因为消息队列32的特性并不会丢失,会被其他执行服务器继续争抢去执行。
102.可选的,当数据库22为能够实现分布式锁的redis数据库时,执行服务集群30还可以用于当执行定时任务完毕后,释放该定时任务的任务标识对应的分布式锁。
103.具体的,当redis数据库为成功写入的任务标识配置分布式锁后,任一执行服务器31在执行完定时任务后,可以释放为该定时任务的任务标识配置的分布式锁,以便可以使相同的循环执行的任务进来。
104.在一可选的实施方式中,如图2所示,任务管理装置10可以包括任务采集平台11和任务管理中心12,其中:
105.任务采集平台11用于采集待执行的至少一个定时任务,并将上述至少一个定时任务发送至任务管理中心12进行保存;
106.任务管理中心12用于存储上述至少一个定时任务。
107.具体的,用户可以在任务采集平台11上配置任务脚本,输入执行时间和执行命令,生成一个定时任务,任务采集平台11将采集到的定时任务发送给任务管理中心12进行存储。其中,用户可以采用键盘输入、触摸输入和语音输入等至少一种方式在任务采集平台11上发布任务。任务采集平台11可以采用界面化管理,让用户一目了然,操作简单,不需要人工手动操作crontab就可以发布任务,解决了传统多服务器处理任务时管理复杂,配置复杂的痛点。
108.任务管理中心12可以包括但不限于以下至少一个模块:任务排重模块、统计报表模块、任务状态管理模块、监控模块、任务投递模块和报警模块等等。其中,任务排重模块可以用于排查是否有定时任务被重复保存,从而防止任务重复。统计报表模块可以用于保存定时任务的调用过程,统计任务数据。任务状态管理模块可以用于管理定时任务的状态,状态可以包括等待、启动、完成、成功或失败等。监控模块可以用于监控任务推送系统(各推送服务器21)和任务执行系统(各执行服务器31)的运行情况。任务投递模块可以用于分发任务标识到推送服务器21。报警模块可以用于当任务分发失败或执行失败时,发送邮件给相关开发人员等。此外,任务管理中心12还可以对定时任务进行删除、修改等操作。
109.本技术实施例中,该系统中涉及的各个组件可以运行在windows、linux、ios等其中一种系统下,即该系统可以适用于任何操作系统。
110.综上,本技术的技术方案,无需用户手动为每台服务器配置crontab文件,简化了多服务器管理的复杂度。此外,通过任务分发机制,能够使各台服务器负载趋于均衡化。另外,推送服务器只把写入数据库成功的任务标识推送至消息队列,这样能够防止任务标识被重复推入消息队列,进而能够防止定时任务被重复执行。采用确认机制的消息队列,可以防止任务丢失,并且利用它的公平分发模式,可以防止队列中消息的挤压,保证各执行服务器负载均衡,还可以使得多台执行服务器同时执行任务而任务不会重复。
111.请参阅图3,本技术提供了一种分布式定时任务处理方法。该方法可以应用于前述实施例提供的分布式定时任务处理系统。如图3所示,该方法可以包括以下步骤:
112.s301、接收待执行的至少一个定时任务。
113.其中,系统可以接收并存储有待执行的至少一个定时任务,这些定时任务可以是用户输入的,也可以是系统从网络端获取的。上述至少一个定时任务中的每一个定时任务具有任务标识,不同的定时任务对应的任务标识不同。一个定时任务可以由执行时间和执行命令组成,该执行时间可以为循环时间,也可以为具体时间,还可以为循环时间+具体时间。定时任务的执行时间可以精确到分钟,也可以精确到秒钟。
114.s302、判断当前时刻上述至少一个定时任务中是否存在需要执行的目标定时任
务,若存在,则执行步骤s303。
115.具体的,系统可以实时或周期性判断是否有定时任务的执行时间与当前时刻相符,如果有,则表明该定时任务当前需要被执行。同一时刻需要被执行的定时任务可以有一个或多个。其中,判断周期可以为1秒、2秒、5秒、1分钟、5分钟或其他值。
116.可选的,当定时任务的执行时间精确到分钟时,系统可以每分钟判断一次是否有定时任务的执行时间与当前时刻相符;当执行时间精确到秒钟时,系统可以每秒钟判断一次是否有定时任务的执行时间与当前时刻相符。
117.s303、获取目标定时任务并执行。
118.系统在执行定时任务时,可以把任务执行结果存入日志数据库中,以便相关开发人员可以及时查看。另外,如果任务执行失败,系统可以发送邮件给相关开发人员,以告知任务执行失败结果及其原因,以便开发人员可以及时处理。
119.本技术的技术方案无需用户手动配置crontab文件,解决了传统多服务器处理任务时管理复杂,配置复杂的痛点。
120.请参阅图4,本技术提供了另一种分布式定时任务处理方法。该方法可以应用于前述实施例提供的分布式定时任务处理系统。其中,该系统可以包括任务管理装置10、推送服务集群20和执行服务集群30。如图4所示,该方法可以包括以下步骤:
121.s401、任务管理装置10接收待执行的至少一个定时任务。
122.可选的,任务管理装置10可以包括任务采集平台11和任务管理中心12,步骤s401任务管理装置10接收待执行的至少一个定时任务的具体实施方式可以包括:
123.任务采集平台11采集待执行的至少一个定时任务,并将上述至少一个定时任务发送至任务管理中心12进行保存;
124.任务管理中心12存储上述至少一个定时任务。
125.具体的,用户可以在任务采集平台11上配置任务脚本,输入执行时间和执行命令,生成一个定时任务,任务采集平台11将采集到的定时任务发送给任务管理中心12进行存储。其中,用户可以采用键盘输入、触摸输入和语音输入等至少一种方式在任务采集平台11上发布任务。任务采集平台11可以采用界面化管理,让用户一目了然,操作简单,不需要人工手动操作crontab就可以发布任务,解决了传统多服务器处理任务时管理复杂,配置复杂的痛点。
126.s402、推送服务集群20扫描任务管理装置10,判断当前时刻是否存在需要执行的目标定时任务,若存在,将目标定时任务的任务标识推送至执行服务集群30。
127.可选的,推送服务集群20可以包括多台推送服务器21和数据库22,步骤s402推送服务集群20扫描任务管理装置10,判断当前时刻是否存在需要执行的目标定时任务,若存在,将目标定时任务的任务标识推送至执行服务集群30的具体实施方式可以包括:
128.多台推送服务器21分别扫描任务管理装置10,判断当前时刻是否存在需要执行的目标定时任务,若存在,将目标定时任务的任务标识写入数据库22中,若写入成功,将目标定时任务的任务标识推送至执行服务集群30。
129.具体的,多台推送服务器21可以分别扫描任务管理中心12,当定时任务的执行时间精确到分钟时,推送服务器21可以每分钟扫描一次任务管理中心12;当定时任务的执行时间精确到秒钟时,推送服务器21可以每秒钟扫描一次任务管理中心12。推送服务器21将
目标定时任务的任务标识成功写入数据库22后,则可以继续将该任务标识推送至执行服务集群30,如果写入数据库22不成功,则推送服务器21可以丢弃该任务标识,并继续扫描任务管理中心12。这样可以避免任务标识被重复推入执行服务集群30,进而防止任务被重复执行。
130.可选的,当上述至少一个定时任务中的每一个定时任务的执行时间精确到秒时,多台推送服务器21可以分别以每秒钟1次的频率扫描任务管理中心12。
131.其中,推送服务器21可以采用golang语言的time包的tick机制来实现秒级定时,基于golang开发的秒级定时任务系统程序,可以每秒钟扫描一次任务管理中心12,从而能够解决传统crontab时间维度只能到分的痛点。
132.可选的,数据库22可以为redis数据库,用于存储写入成功的任务标识,并为写入成功的任务标识配置分布式锁。
133.可选的,多台推送服务器21分别扫描任务管理装置10,判断当前时刻是否存在需要执行的目标定时任务的具体实施方式可以包括:
134.多台推送服务器21分别利用hash算法计算自身需要处理的任务标识,扫描任务管理装置10,从自身需要处理的任务标识对应的定时任务中,判断当前时刻是否存在需要执行的目标定时任务。
135.具体的,推送服务器21可以利用自己的服务器名称或身份标识来求得对应的hash值,可以取hash值的第一位或中间位或最后一位数值来关联自身需要处理的任务标识。例如,当推送服务器21计算得到的hash值的最后一位为1,则推送服务器21对应需要处理的任务标识的尾号也为1,即任务标识1、11、21、31、41
……
。这样,各台推送服务器21可以有针对性的扫描自身需要负责的任务标识,进而有针对性的推送任务标识,且可以保证各推送服务器21的负载均衡。
136.s403、执行服务集群30获取推送服务集群20推送的任务标识,从任务管理装置10获取与该任务标识对应的定时任务并执行。
137.可选的,执行服务集群30可以包括多台执行服务器31和消息队列32,步骤s403执行服务集群30获取推送服务集群20推送的任务标识,从任务管理装置10获取与该任务标识对应的定时任务并执行的具体实施方式可以包括:
138.消息队列32存储推送服务集群20推送的任务标识,并将存储的任务标识分发给多台执行服务器31;
139.多台执行服务器31分别获取任务标识,从任务管理装置10获取与该任务标识对应的定时任务并执行。
140.其中,消息队列32中可以存储有至少一个由推送服务器21推送来的任务标识。执行服务器31可以采用异步采集程序,多线程去监听消息队列32,当监听到消息时,从该消息中获取任务标识。其中,异步采集程序可以使用golang语言来编写,开启多个goroutine监听消息队列32,充分利用执行服务器31的cpu资源,提高执行效率。进一步地,执行服务器31从任务管理中心12中获取该任务标识对应的定时任务并执行。此外,执行服务器31在执行定时任务时,可以把任务执行结果存入日志数据库中,以便相关开发人员可以及时查看。另外,如果任务执行失败,执行服务器31可以发送邮件给相关开发人员,以告知任务执行失败结果及其原因,以便开发人员可以及时处理。
141.可选的,图4所描述的方法还可以包括以下步骤:
142.多台执行服务器31分别当执行定时任务完毕后,向消息队列32发送确认信息,该确认信息可以用于指示该定时任务已成功执行完毕;
143.消息队列32在接收到该确认信息后,删除该定时任务的任务标识。
144.具体的,为了防止任务丢失,消息队列32可以采用ack机制,在执行服务器31执行完一次任务后,需要向消息队列32反馈确认信息,以告知消息队列32任务已成功执行完毕,使得消息队列32可以将任务对应的任务标识从队列中删除,从而可以防止消息队列32将该任务标识再分发给其他执行服务器31,导致任务被重复执行。
145.可选的,图4所描述的方法还可以包括以下步骤:
146.消息队列32在未接收到确认信息时,将该定时任务的任务标识重新进行分发。
147.具体的,消息队列32可以预先设置一个定时,当分发任务后预设时间内未收到执行服务器31发送的确认信息,则消息队列32可以将该任务的任务标识重新分发给其他执行服务器31,从而可以有效防止任务丢失。
148.可选的,当数据库22为能够实现分布式锁的redis数据库时,执行服务集群30当执行定时任务完毕后,可以释放该定时任务的任务标识对应的分布式锁,以便可以使相同的循环执行的任务进来。
149.本技术的技术方案无需用户手动为服务器配置crontab文件,简化了配置的复杂度。此外,通过任务分发机制,能够使各台服务器负载趋于均衡化。另外,推送服务器只把写入数据库成功的任务标识推送至消息队列,这样能够防止任务标识被重复推入消息队列,进而能够防止定时任务被重复执行。采用确认机制的消息队列,可以防止任务丢失,并且利用它的公平分发模式,可以防止队列中消息的挤压,保证各执行服务器负载均衡,还可以使得多台执行服务器同时执行任务而任务不会重复。
150.请参阅图5,本技术提供了又一种分布式定时任务处理方法。该方法可以应用于前述实施例提供的分布式定时任务处理系统。如图5所示,该方法可以包括以下步骤:
151.s501、任务采集平台11采集定时任务。
152.本技术实施例中,任务采集平台11可以采用界面化管理,用户可以通过键盘输入、触摸输入和语音输入等至少一种方式在任务采集平台11上发布定时任务。其中,定时任务可以由执行时间和执行命令组成。
153.s502、任务采集平台11将采集的定时任务发送至任务管理中心12进行保存。
154.s503、任务管理中心12保存接收到的定时任务。
155.其中,任务管理中心12可以为每个定时任务配置任务标识。任务标识可以看作为用来识别定时任务的一种记号,每一个定时任务的任务标识都是唯一的,有别于其他定时任务的任务标识。任务标识可以是数字、字母、符号和文字的其中一种或几种的组合构成的。
156.s504、推送服务器21扫描任务管理中心12,查询当前时刻需要执行的目标定时任务。
157.具体的,当定时任务的执行时间精确到秒时,推送服务器21可以每秒钟扫描一次任务管理中心12,以查询是否有定时任务的执行时间与当前时刻相符,如果没有,则继续进行扫描;如果有,则获取相应的任务标识。
158.可选的,步骤s504推送服务器21扫描任务管理中心12,查询当前时刻需要执行的目标定时任务的具体实施方式可以包括:
159.推送服务器21利用hash算法计算自身需要处理的任务标识,扫描任务管理中心12,从自身需要处理的任务标识对应的定时任务中,查询当前时刻需要执行的目标定时任务。
160.具体的,推送服务器21可以利用自己的服务器名称或身份标识来求得对应的hash值,可以取hash值的第一位或中间位或最后一位数值来关联自身需要处理的任务标识。这样使得推送服务器21可以有针对性的扫描自身需要负责的任务标识,进而有针对性的推送任务标识。
161.s505、推送服务器21将目标定时任务的任务标识写入数据库22中。
162.s506、数据库22保存写入成功的任务标识,并生成回执信息。
163.s507、数据库22将回执信息发送给推送服务器21。
164.s508、推送服务器21在接收到用于指示成功写入的回执信息时,将目标定时任务的任务标识推送至消息队列32。
165.本技术实施例中,推送服务器21将获取到任务标识写入数据库22,数据库22可以查询写入的任务标识是否已经存在,若否,可以保存该任务标识,并向推送服务器21发送用于指示任务标识写入成功的回执信息,以使推送服务器21将该任务标识推送至消息队列32。如果数据库22查询到推送服务器21写入的任务标识已经存在,则数据库22将不再重复保存该任务标识,并向推送服务器21发送用于指示任务标识写入失败的回执信息。推送服务器21在收到失败回执信息后,可以将该任务标识丢弃,从而可以避免同一任务标识被重复推入消息队列32,导致任务被重复执行。其中,数据库22可以为能够实现分布式锁的redis数据库,可以为写入成功的任务标识分配分布式锁。
166.s509、消息队列32存储接收到的任务标识并分发给执行服务器31。
167.s510、执行服务器31多线程监听消息队列32,从消息队列32中获取任务标识。
168.s511、执行服务器31从任务管理中心12中获取该任务标识对应的定时任务。
169.s512、执行服务器31执行该定时任务。
170.本技术实施例中,执行服务器31可以采用异步采集程序,多线程去监听消息队列32,当监听到消息时,从该消息中获取任务标识,并在任务管理中心12中获取对应的定时任务并执行。
171.可选的,当数据库22为写入成功的任务标识分配有分布式锁时,执行服务器31在执行完定时任务后,可以释放该定时任务的任务标识对应的分布式锁,这样可以便于相同的循环执行的任务进来。
172.可选的,图5所描述的方法还可以包括以下步骤:
173.执行服务器31在定时任务执行完毕后,向消息队列32发送确认信息,该确认信息可以用于指示该定时任务已成功执行完毕;
174.消息队列32在接收到该确认信息后,删除该定时任务的任务标识。
175.具体的,为了防止任务丢失,消息队列32可以采用ack机制,在执行服务器31执行完一次任务后,需要向消息队列32反馈确认信息,以告知消息队列32任务已成功执行完毕,使得消息队列32可以将任务对应的任务标识从队列中删除,从而可以防止消息队列32将该
任务标识再分发给其他执行服务器31,导致任务被重复执行。
176.相应地,图5所描述的方法还可以包括以下步骤:
177.消息队列32在未接收到该确认信息时,将该定时任务的任务标识重新进行分发。
178.这样,当执行服务器31发生故障,它正在执行或者即将准备执行的任务因为消息队列32的特性并不会丢失,会被其他执行服务器继续争抢去执行。
179.本技术的技术方案无需用户手动为每台服务器配置crontab文件,简化了多服务器管理的复杂度。此外,通过任务分发机制,能够使各台服务器负载趋于均衡化。另外,推送服务器只把写入数据库成功的任务标识推送至消息队列,这样能够防止任务标识被重复推入消息队列,进而能够防止定时任务被重复执行。采用确认机制的消息队列,可以防止任务丢失,并且利用它的公平分发模式,可以防止队列中消息的挤压,保证各执行服务器负载均衡,还可以使得多台执行服务器同时执行任务而任务不会重复。
180.请参阅图6,本技术提供了一种分布式定时任务处理装置。该装置可以用于执行前述方法实施例中的全部或部分步骤。如图6所示,该装置可以包括:
181.接收单元601,用于接收待执行的至少一个定时任务;
182.判断单元602,用于判断当前时刻上述至少一个定时任务中是否存在需要执行的目标定时任务;
183.执行单元603,用于当判断单元602判断出存在目标定时任务时,从接收单元601获取目标定时任务并执行。
184.可选的,判断单元602可以包括推送模块和数据库模块,其中,推送模块用于扫描接收单元601,判断当前时刻是否存在需要执行的目标定时任务,若存在,将目标定时任务的任务标识写入数据库模块中,若写入成功,将目标定时任务的任务标识推送至执行单元603。
185.可选的,推送模块扫描接收单元601,判断当前时刻是否存在需要执行的目标定时任务的方式可以包括:
186.推送模块利用hash算法计算自身需要处理的任务标识,扫描接收单元601,从自身需要处理的任务标识对应的定时任务中,判断当前时刻是否存在需要执行的目标定时任务。
187.可选的,执行单元603可以包括执行模块和队列模块,其中:
188.队列模块用于存储推送模块推送的任务标识,并将存储的任务标识分发给执行模块;
189.执行模块用于获取任务标识,从接收单元601获取与该任务标识对应的定时任务并执行。
190.可选的,执行模块还可以用于当执行定时任务完毕后,向队列模块发送确认信息,该确认信息用于指示该定时任务已成功执行完毕;
191.队列模块还用于在接收到该确认信息后,删除该定时任务的任务标识。
192.可选的,队列模块还用于在未接收到该确认信息时,将该定时任务的任务标识重新进行分发。
193.可选的,接收单元601可以包括任务采集模块和任务管理模块,其中:
194.任务采集模块用于采集待执行的至少一个定时任务,并将上述至少一个定时任务
发送至任务管理模块进行保存;
195.任务管理模块用于存储上述至少一个定时任务。
196.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在相应的方法实施例中进行了详细描述,此处将不再做详细阐述说明。
197.实施图6所示的装置,无需用户手动为服务器配置crontab文件,简化了配置的复杂度。此外,通过任务分发机制,能够使各模块负载趋于均衡化。另外,推送模块只推送写入成功的任务标识,这样能够防止任务标识被重复推送,进而能够防止定时任务被重复执行。
198.请参阅图7,本技术提供了另一种分布式定时任务处理装置。该装置可以用于执行前述方法实施例中的全部或部分步骤。具体的,如图7所示,该装置700可以包括:至少一个处理器701、存储器702、至少一个通信接口703等组件。其中,这些组件可以通过一条或多条通信总线704进行通信连接。本领域技术人员可以理解,图7中示出的装置700的结构并不构成对本技术实施例的限定,它既可以是总线形结构,也可以是星型结构,还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
199.其中:
200.处理器701可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field

programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
201.存储器702可以包括各种类型的存储单元,例如系统内存、只读存储器(rom),和永久存储装置。其中,rom可以存储处理器701或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器702可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(dram,sram,sdram,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器702可以包括可读和/或写的可移除的存储设备,例如激光唱片(cd)、只读数字多功能光盘(例如dvd

rom,双层dvd

rom)、只读蓝光光盘、超密度光盘、闪存卡(例如sd卡、min sd卡、micro

sd卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
202.通信接口703可以包括有线通信接口、无线通信接口等,可以用于与外部设备进行通信交互。
203.存储器702上存储有可执行代码,当可执行代码被处理器702处理时,可以使处理器701执行前述方法实施例中的部分或全部步骤。
204.上文中已经参考附图详细描述了本技术的方案。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。
本领域技术人员也应该知悉,说明书中所涉及的动作和模块并不一定是本技术所必须的。另外,可以理解,本技术实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减,本技术实施例装置中的模块可以根据实际需要进行合并、划分和删减。
205.此外,根据本技术的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本技术的上述方法中部分或全部步骤的计算机程序代码指令。
206.或者,本技术还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或电子设备、服务器等)的处理器执行时,使所述处理器执行根据本技术的上述方法的各个步骤的部分或全部。
207.本领域技术人员还将明白的是,结合这里的申请所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
208.附图中的流程图和框图显示了根据本技术的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
209.以上已经描述了本技术的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1