CN113760481A - 一种分布式定时任务调度系统和方法 - Google Patents

一种分布式定时任务调度系统和方法 Download PDF

Info

Publication number
CN113760481A
CN113760481A CN202010560748.2A CN202010560748A CN113760481A CN 113760481 A CN113760481 A CN 113760481A CN 202010560748 A CN202010560748 A CN 202010560748A CN 113760481 A CN113760481 A CN 113760481A
Authority
CN
China
Prior art keywords
task
information
timing
service provider
address information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010560748.2A
Other languages
English (en)
Inventor
丰泽
王晓成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202010560748.2A priority Critical patent/CN113760481A/zh
Publication of CN113760481A publication Critical patent/CN113760481A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • G06F9/4887Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues involving deadlines, e.g. rate based, periodic

Abstract

本发明公开了一种分布式定时任务调度系统和方法,涉及计算机技术领域。该系统的一具体实施方式包括:配置中心,用于配置定时任务的任务信息和对应的路由规则,将任务信息发送至任务调度器;任务调度器,用于在达到定时任务的任务触发条件时,将定时任务发送至服务调用方;服务调用方,用于获取已注册的服务提供方的地址信息,使用定时任务对应的路由规则过滤地址信息,筛选出满足路由规则的目标服务提供方,将携带任务调用信息的调用请求发送至目标服务提供方,以使目标服务提供方从调用请求中解析出任务调用信息,执行任务调用信息指定的目标方法。该系统实现了多机器部署的任务调度,配置简单,部署方便,降低单点故障的风险,且便于维护。

Description

一种分布式定时任务调度系统和方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种分布式定时任务调度系统和方法。
背景技术
随着互联网的发展,很多业务场景都会有定时任务调度的需求,比如:某购物网站需要凌晨修改产品价格,某平台需要每日23时迁移增量数据,某应用程序每隔15秒向用户推送新闻等等。
当前对定时任务进行调度时,一般通过以下几种方案实现:方案一:利用数据库实现,即将定时任务存储到数据库,在执行时从数据库中取出定时任务并执行,如果触发器的名称与执行时间相同,则只允许一个机器执行该定时任务;方案二:通过cron表达式,对多台机器进行定时任务的交叉配置,使得这些机器能够按照配置执行定时任务;方案三:在某台机器上开启所有定时任务,由该机器执行所有定时任务,其他机器上定时任务均处于关闭状态;方案四:将全部定时任务分配到每台机器,每个定时任务只在一台机器上处于开启状态。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
方案一需要维护数据表,每台机器都需要不停的获取表数据,导致所有机器的负荷较大,工作效率低;方案二使用cron表达式进行配置,不便于扩展,且表达式拆分复杂;方案三为单台机器部署,容易发生单点故障问题;方案四任务分配过程复杂,需要根据机器启动定时任务,且存在单点故障问题,维护困难。
发明内容
有鉴于此,本发明实施例提供一种分布式定时任务调度系统和方法,该系统通过统一配置定时任务,在定时任务被触发时,使用配置的路由规则过滤服务提供方,由过滤后的服务提供方执行定时任务,实现了多机器部署的任务调度,配置简单,部署方便,降低单点故障的风险,且便于维护。
为实现上述目的,根据本发明实施例的一个方面,提供了一种分布式定时任务调度系统。
本发明实施例的一种分布式定时任务调度系统,包括:配置中心,用于配置定时任务的任务信息和对应的路由规则,将所述任务信息发送至任务调度器;其中,所述任务信息包括任务标识、任务调用信息和任务触发条件;所述任务调度器,用于在达到所述定时任务的任务触发条件时,将所述定时任务发送至服务调用方;所述服务调用方,用于获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,将携带所述任务调用信息的调用请求发送至所述目标服务提供方,以使所述目标服务提供方从所述调用请求中解析出所述任务调用信息,执行所述任务调用信息指定的目标方法;其中,所述目标方法为所述定时任务执行的任务逻辑。
可选地,所述路由规则包括限制任务执行地址信息;所述服务调用方,还用于实现路由接口,重写路由方法,通过执行所述路由方法来获取已注册的服务提供方的地址信息,将所述限制任务执行地址信息与所述地址信息进行比较,筛选出包含在所述限制任务执行地址信息的地址信息,将筛选出的地址信息对应的服务提供方作为目标服务提供方。
可选地,所述任务信息还包括任务状态;所述配置中心,还用于:当接收到新增任务指令时,执行新增任务逻辑;其中,所述新增任务逻辑的实现包括:确定待增加任务的任务状态为启用状态,构建用于描述所述待增加任务的JobDetail对象和Trigger对象;其中,所述待增加任务为所述新增任务指令指定的定时任务,所述Trigger对象用于描述所述待增加任务的任务触发条件;以及将所述JobDetail对象和所述Trigger对象注册到所述任务调度器,启动所述任务调度器。
可选地,所述配置中心,还用于:当接收到删除任务指令时,执行删除任务逻辑;其中,所述删除任务逻辑的实现包括:确定待删除任务的任务状态为所述启用状态,获取用于描述所述待删除任务的JobDetail对象;其中,所述待删除任务为所述删除任务指令指定的定时任务;以及确定所述待删除任务的JobDetail对象不为空,停止并移除所述待删除任务的Trigger对象,删除所述待删除任务。
可选地,所述新增任务逻辑的实现还包括:将所述待增加任务的基本信息存储到数据库;所述删除任务逻辑的实现还包括:根据为所述待删除任务设定的主键,从所述数据库中删除所述待删除任务的基本信息。
可选地,所述配置中心,还用于:当接收到修改任务指令时,将待修改任务作为所述待删除任务,执行所述删除任务逻辑;其中,所述待修改任务为所述修改任务指令指定的定时任务;以及将所述待修改任务作为所述待增加任务,执行所述新增任务逻辑。
可选地,所述基本信息包括所述任务状态;所述配置中心,还用于:当接收到重启指令时,从所述数据库中获取所述启用状态的定时任务,将获取的定时任务添加到所述任务调度器。
可选地,所述配置中心还用于,配置所述服务调用方的第一服务配置信息,以及所述服务提供方的第二服务配置信息;所述目标服务提供方,还用于引入所述第二服务配置信息,根据所述第二服务配置信息创建任务bean,将所述任务bean注入Spring容器。
为实现上述目的,根据本发明实施例的另一方面,提供了一种分布式定时任务调度方法。
本发明实施例的一种分布式定时任务调度方法,包括:配置中心配置定时任务的任务信息和对应的路由规则,将所述任务信息发送至任务调度器;其中,所述任务信息包括任务标识、任务调用信息和任务触发条件;所述任务调度器在达到所述定时任务的任务触发条件时,将所述定时任务发送至服务调用方;所述服务调用方获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,将携带所述任务调用信息的调用请求发送至所述目标服务提供方,以使所述目标服务提供方从所述调用请求中解析出所述任务调用信息,执行所述任务调用信息指定的目标方法;其中,所述目标方法为所述定时任务执行的任务逻辑。
可选地,所述路由规则包括限制任务执行地址信息;所述服务调用方获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,包括:实现路由接口,重写路由方法,通过执行所述路由方法来获取已注册的服务提供方的地址信息,将所述限制任务执行地址信息与所述地址信息进行比较,筛选出包含在所述限制任务执行地址信息的地址信息,将筛选出的地址信息对应的服务提供方作为目标服务提供方。
可选地,所述任务信息还包括任务状态;所述方法还包括:当配置中心接收到新增任务指令时,执行新增任务逻辑;其中,所述新增任务逻辑的实现包括:确定待增加任务的任务状态为启用状态,构建用于描述所述待增加任务的JobDetail对象和Trigger对象;其中,所述待增加任务为所述新增任务指令指定的定时任务,所述Trigger对象用于描述所述待增加任务的任务触发条件;以及将所述JobDetail对象和所述Trigger对象注册到所述任务调度器,启动所述任务调度器。
可选地,所述方法还包括:当配置中心接收到删除任务指令时,执行删除任务逻辑;其中,所述删除任务逻辑的实现包括:确定待删除任务的任务状态为所述启用状态,获取用于描述所述待删除任务的JobDetail对象;其中,所述待删除任务为所述删除任务指令指定的定时任务;以及确定所述待删除任务的JobDetail对象不为空,停止并移除所述待删除任务的Trigger对象,删除所述待删除任务。
可选地,所述新增任务逻辑的实现还包括:将所述待增加任务的基本信息存储到数据库;所述删除任务逻辑的实现还包括:根据为所述待删除任务设定的主键,从所述数据库中删除所述待删除任务的基本信息。
可选地,所述方法还包括:当配置中心接收到修改任务指令时,将待修改任务作为所述待删除任务,执行所述删除任务逻辑;其中,所述待修改任务为所述修改任务指令指定的定时任务;以及将所述待修改任务作为所述待增加任务,执行所述新增任务逻辑。
可选地,所述基本信息包括所述任务状态;所述方法还包括:当配置中心接收到重启指令时,从所述数据库中获取所述启用状态的定时任务,将获取的定时任务添加到所述任务调度器。
可选地,所述方法还包括:配置中心配置所述服务调用方的第一服务配置信息,以及所述服务提供方的第二服务配置信息;所述目标服务提供方引入所述第二服务配置信息,根据所述第二服务配置信息创建任务bean,将所述任务bean注入Spring容器。
为实现上述目的,根据本发明实施例的再一方面,提供了一种电子设备。
本发明实施例的一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的一种分布式定时任务调度方法。
为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质。
本发明实施例的一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的一种分布式定时任务调度方法。
上述发明中的一个实施例具有如下优点或有益效果:通过统一配置定时任务,在定时任务被触发时,使用配置的路由规则过滤服务提供方,由过滤后的服务提供方执行定时任务,实现了多机器部署的任务调度,配置简单,部署方便,降低单点故障的风险,且便于维护;通过在配置中心配置限制任务执行地址信息,来过滤服务提供方,简化了配置内容;通过配置中心增加、删除、修改定时任务,实现了定时任务的动态配置;将任务的基本信息存储到数据库,在配置中心重启时,可以从数据库中获取定时任务,并添加到任务调度器,保证系统正常运行;通过配置中心统一配置服务调用方和服务提供方,配置简单,无需额外开发。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的分布式定时任务调度方法的主要步骤的示意图;
图2是根据本发明实施例的分布式定时任务调度方法的时序图;
图3是本发明实施例的分布式定时任务调度方法中路由实现的原理示意图;
图4是本发明实施例的分布式定时任务调度方法中路由实现的流程图;
图5是本发明实施例的分布式定时任务调度方法中新增任务的处理流程示意图;
图6是本发明实施例的分布式定时任务调度方法中删除任务的处理流程示意图;
图7是本发明实施例的分布式定时任务调度方法中修改任务的处理流程示意图;
图8是本发明实施例的分布式定时任务调度方法中重启任务的处理流程示意图;
图9是根据本发明实施例的分布式定时任务调度系统的主要模块的示意图;
图10是根据本发明实施例的分布式定时任务调度系统的系统架构示意图;
图11是本发明实施例可以应用于其中的示例性系统架构图;
图12是适用于来实现本发明实施例的电子设备的计算机装置的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
下面对本申请涉及到的术语进行解释。
cron表达式:是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义。
Dubbo:是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。
RPC:远程过程调用协议(Remote Procedure Call Protocol),是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
bean:描述Java的软件组件模型。使用bean将可以重复使用的软件代码打包。
Spring:一个开源的应用程序框架,是针对bean的生命周期进行管理的轻量级容器。
Quartz:是一个完全由java编写的开源作业调度框架,提出了任务(Job)、触发器(Trigger)和任务调度器(Scheduler)三个核心概念。
图1是根据本发明实施例的分布式定时任务调度方法的主要步骤的示意图。如图1所示,本发明实施例的分布式定时任务调度方法,用于分布式定时任务调度系统的任务调度,该分布式定时任务调度系统包括配置中心、任务调度器和至少一个服务调用方,该分布式定时任务调度方法主要包括如下步骤:
步骤S101:配置中心配置定时任务的任务信息和对应的路由规则,将所述任务信息发送至任务调度器。配置中心需要配置定时任务的任务标识、任务调用信息和任务触发条件。其中,任务调用信息为执行定时任务所需调用的方法。任务触发条件即执行定时任务所需满足的条件,用于决定什么时候来执行定时任务,比如每秒执行一次、每分钟执行一次。路由规则用于规定服务调用方可以调用哪些服务提供方。
步骤S102:任务调度器在达到所述定时任务的任务触发条件时,将所述定时任务发送至服务调用方。任务调度器启动后,搜索需要执行的定时任务,当某个定时任务被触发,即达到该定时任务的任务触发条件时,将该定时任务发送至服务调用方。
步骤S103:服务调用方获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,将携带所述任务调用信息的调用请求发送至所述目标服务提供方,以使目标服务提供方从所述调用请求中解析出所述任务调用信息,执行所述任务调用信息指定的目标方法。
服务提供方预先向Dubbo服务注册,服务调用方获取已注册的服务提供方的地址信息,在接收到定时任务后,使用该定时任务对应的路由规则对服务提供方进行过滤,得到目标服务提供方;之后向目标服务提供方发送携带任务调用信息的调用请求。
目标服务提供方从调用请求中解析出任务调用信息,执行该任务调用信息中的目标方法,而目标方法中编写有定时任务执行的任务逻辑,故目标方法执行完成,即代表定时任务执行完毕。
图2是根据本发明实施例的分布式定时任务调度方法的时序图。如图2所示,本发明实施例的分布式定时任务调度方法,主要包括如下步骤:
步骤S201:配置中心配置定时任务的任务信息、对应的路由规则、服务调用方和服务提供方,将任务信息发送至任务调度器。配置中心负责定时任务的配置、服务调用方的配置、服务提供方的配置、以及路由规则的制定。具体实现时,可以由管理员通过配置中心的用户界面对上述内容进行配置。
实施例中,定时任务的任务信息可以包括任务标识(jobName)、任务调用信息(serviceName)、任务触发条件(cronExpression)、任务描述(jobDesc)和任务状态(status)。任务标识可以是任务别名,例如:worker1、worker2。任务调用信息可以是类名.方法名形式,例如void serviceClient.dealMethod()。任务触发条件可以用cron表达式实现。任务状态包括启用状态和停用状态。
实施例中,服务调用方为调用远程服务的Dubbo消费者(Consume r),服务提供方为暴露服务的Dubbo提供者(Provider)。其中,为Du bbo消费者配置的第一服务配置信息,可以包括:应用配置(<dubbo:a pplication/>)、注册中心配置(<dubbo:registry/>)、引用配置(dubbo:reference/)等。其中,应用配置用于配置当前应用信息,注册中心配置用于配置连接注册中心相关信息,引用配置用于创建一个远程服务代理。
为Dubbo提供者配置的第二服务配置信息,可以包括:服务配置(<dubbo:service/>)、协议配置(dubbo:protocol/)、应用配置、注册中心配置等。其中,服务配置用于暴露一个服务,协议配置用于配置提供服务的协议信息。Dubbo提供者需要引入配置中心提供的第一服务配置信息对应的jar包,配置定制的Dubbo服务,之后把任务bean注入Spring容器,由Spring容器统一管理。Dubbo提供者作为服务端,只需统一配置RPC服务即可,无需额外开发。
在配置Dubbo消费者时,可以配置自定义的路由规则。路由规则用于规定Dubbo消费者可以调用哪几个Dubbo提供者。实施例中,路由规则可以包括限制任务执行地址信息(limitIps)。此处的限制任务执行地址信息可以是限制任务执行IP地址列表。
步骤S202:任务调度器在当前定时任务的任务触发条件已被满足时,将当前定时任务发送至服务调用方。任务调度器(Scheduler)启动后,搜索需要执行的定时任务,当某个定时任务被触发时,将该定时任务发送至Dubbo消费者。例如,定时任务worker1的任务触发条件为:从当前时间开始,每隔一分钟执行一次,则任务调度器确定前后两次执行相差一分钟时,将worker1发送至Dubbo消费者。
在一优选的实施例中,为了能够动态的增加、删除定时任务,并且可以扩展任务属性,当定时任务被触发时,可以先执行自定义的任务逻辑。该任务逻辑可以是新增任务逻辑、删除任务逻辑等。比如,由于业务需求变更,需在原有定时任务的基础上动态增加新定时任务,此时可以先在配置中心中添加对该新定时任务的一些配置,任务调度器在执行任务时,从配置中心获取为该新定时任务配置的任务信息,实现新定时任务的增加。
步骤S203:服务调用方实现路由接口,重写路由方法,通过执行路由方法来获取已注册的服务提供方的地址信息,使用当前定时任务对应的路由规则过滤地址信息,筛选出满足该路由规则的目标服务提供方。Dubbo消费者通过实现Dubbo路由接口,重写路由方法,然后发起一次RPC调用,从Dubbo服务获取到所有Dubbo提供者的IP地址,将Dubbo提供者的IP地址与限制任务执行地址信息进行比较,从而筛选出满足路由规则的Dubbo提供者。
图3是本发明实施例的分布式定时任务调度方法中路由实现的原理示意图。如图3所示,实施例中,定义了Route接口,且该Route接口中包含route()操作,并在LimitIpRouter类中实现了route()方法。其中,route()方法包括两个变量,即var1和var2,var1为限制任务执行地址信息,var2为已注册的所有Dubbo提供者的IP地址。
步骤S204:服务调用方将携带任务调用信息的调用请求发送至目标服务提供方。Dubbo消费者根据配置中心的任务调用信息生成调用请求(PRC请求),将该调用请求通过网络发送至步骤S203筛选出的Dubbo提供者。其中,该调用请求用于告诉Dubbo提供者去调用哪一个类的哪一个方法,以及调用该方法所需的参数。
步骤S205:目标服务提供方从调用请求中解析出任务调用信息,调用该任务调用信息中指定的目标方法,返回执行结果。定时任务为一个接口,包含一个目标方法,该目标方法即定时任务需要执行的任务逻辑。Dubbo提供者接收到调用请求后,从调用请求中解析出任务调用信息,根据Dubbo消费者提供的参数执行任务调用信息包含的目标方法,即可实现定时任务的运行。目标方法执行结束后,Dubbo提供者将执行结果返回给Dubbo消费者。
图4是本发明实施例的分布式定时任务调度方法中路由实现的流程图。如图4所示,本发明实施例的分布式定时任务调度方法中路由实现的流程(即步骤S203中路由方法的逻辑实现),主要包括以下步骤:
步骤S401:从invocation中获取入参中配置的限制任务执行IP地址列表。Dubbo消费者从route()方法的invocation中获取var1,即限制任务执行IP地址列表。
步骤S402:循环List<Provider>,滤除List<Provider>中未包含在限制任务执行IP地址列表的Provider,返回过滤后的List<Provider>。Dub bo消费者通过循环List<Provider>,将每个已注册的Dubbo提供者的IP地址与限制任务执行IP地址列表进行比较,从List<Provider>中过滤掉未包含在限制任务执行IP地址列表的Dubbo提供者的IP地址,得到过滤后的List<Provider>。
步骤S403:调用Dubbo服务,利用Dubbo服务实现路由分配。如果过滤后的List<Provider>中只存在一个Dubbo提供者,则可以直接将该D ubbo提供者作为目标服务提供方。如果过滤后的List<Provider>中存在多个Dubbo提供者,则可以调用Dubbo服务,使得可以利用负载均衡策略、集群容错策略等从过滤后的List<Provider>中选择一个Dubbo提供者,作为目标服务提供方。后续Dubbo消费者向该目标服务提供方发送调用请求即可。
比如,过滤后的List<Provider>中存在20个Dubbo提供者,则可以根据配置的负载均衡策略,在20个Dubbo提供者中随机选择一个Dubb o提供者进行本次调用。假设随机选择到了第7个Dubbo提供者,且调用失败,则可以根据集群容错策略,重试其他Dubbo提供者,比如第13个Dubbo提供者,用以保证调用成功。其中,负载均衡策略可以包括随机负载均衡、轮询负载均衡、最少活跃调用数负载均衡、一致性哈希负载均衡等。
在一优选的实施例中,配置中心还负责定时任务的增、删、改、重启等服务。新增任务时,启用状态的定时任务会添加到Scheduler。删除任务时,会直接从数据库表中进行物理删除,且如果删除启用状态的定时任务时,也会将其从Scheduler移除。下面结合附图进行详细说明。
图5是本发明实施例的分布式定时任务调度方法中新增任务的处理流程示意图。当配置中心接收到新增任务指令时,本实施例开始执行新增任务逻辑。新增任务指令可以在管理员通过配置中心的用户界面对待新增任务的任务信息进行设置后,点击新增定时任务按钮生成。新增任务指令包括待新增任务的任务信息。
如图5所示,本发明实施例的分布式定时任务调度方法中新增任务的处理流程(即新增任务逻辑),具体包括以下步骤:
步骤S501:判断待增加任务的任务状态,如果是启用状态,则执行步骤S502;如果是停用状态,则执行步骤S505。根据新增任务指令中设定的待增加任务的任务状态,确定该待增加任务是启用状态,还是停用状态。
步骤S502:构建用于描述待增加任务的JobDetail对象和Trigger对象。如果待增加任务为启用状态,则构建JobDetail对象和Trigger对象。其中,JobDetail对象是描述定时任务(Job)的实现类及其它相关的静态信息,比如任务名称、任务描述、关联监听器等信息。Trigger为触发器,用于自定义Job执行的规则(即任务触发条件)。
步骤S503:将JobDetail对象和Trigger对象注册到任务调度器。Sch eduler用于管理Job和Trigger。执行scheduler.scheduleJob(jobDetail,si mpleTrigger)方法可以将JobDetail和Trigger注册到Scheduler。
步骤S504:启动任务调度器。当Scheduler初始化完成,并且JobDe tail和Trigger也注册完成后,就可以调用scheduler.start()方法来启动Sch eduler了。scheduler.start()方法一旦被调用,Scheduler就开始搜索需要执行的Job。
步骤S505:将待增加任务的基本信息存储到数据库。此处的基本信息至少包括任务名称和任务状态。在将基本信息存储到数据库时,会为每个定时任务生成主键,用于唯一标识该定时任务。数据库可以是mysql、oracle、sqlserver等。
图6是本发明实施例的分布式定时任务调度方法中删除任务的处理流程示意图。当配置中心接收到删除任务指令时,本实施例开始执行删除任务逻辑。删除任务指令可以在管理员通过配置中心的用户界面点击删除定时任务按钮来生成。删除任务指令包括待删除任务的任务信息。
如图6所示,本发明实施例的分布式定时任务调度方法中删除任务的处理流程(即删除任务逻辑),具体包括以下步骤:
步骤S601:判断待删除任务的任务状态,如果是启用状态,则执行步骤S602;如果是停用状态,则执行步骤S605。根据删除任务指令中设定的待删除任务的任务状态,确定该待删除任务是启用状态,还是停用状态。
步骤S602:获取用于描述待删除任务的JobDetail对象。根据待删除任务的任务名称,获取对应的JobDetail对象。
步骤S603:判断待删除任务的JobDetail对象是否为空,如果不为空,则执行步骤S604;如果为空,则结束本流程。判断JobDetail对象是否为null,如果不为null,则执行步骤S604;否则结束本流程。
步骤S604:停止并移除待删除任务的Trigger对象,删除待删除任务。根据待删除任务的任务名称,停止对应的Trigger,之后移除对应的Trigger,并删除该定时任务。
步骤S605:根据为待删除任务设定的主键,从数据库中删除待删除任务的基本信息。按照主键,将数据库中该待删除任务对应的数据记录进行物理删除。
图7是本发明实施例的分布式定时任务调度方法中修改任务的处理流程示意图。当配置中心接收到修改任务指令时,本实施例开始执行修改任务逻辑。修改任务指令可以在管理员通过配置中心的用户界面对待修改任务的任务信息进行重新设置后,点击修改定时任务按钮来生成。修改任务指令包括待修改任务的任务信息。
如图7所示,本发明实施例的分布式定时任务调度方法中修改任务的处理流程(即修改任务逻辑),具体包括以下步骤:
步骤S701:将待修改任务作为待删除任务,执行删除任务逻辑。将待修改任务作为待删除任务,执行步骤S601-步骤S605的删除任务逻辑,实现待修改任务原始信息的删除。
步骤S702:将待修改任务作为待增加任务,执行新增任务逻辑。将待修改任务作为待删除任务,将待修改任务作为待增加任务,执行步骤S501-步骤S505的新增任务逻辑,实现待修改任务更新信息的增加。
图8是本发明实施例的分布式定时任务调度方法中重启任务的处理流程示意图。当配置中心接收到重启指令时,本实施例开始执行重启逻辑。如图8所示,本发明实施例的分布式定时任务调度方法中重启任务的处理流程(即重启逻辑),具体包括以下步骤:
步骤S801:从数据库中获取启用状态的定时任务。重启配置中心时,分布式定时任务调度系统会从数据库中获取所有启用状态的定时任务。
步骤S802:将获取的定时任务动态添加到任务调度器。将所有启用状态的定时任务动态添加到Scheduler。
通过本发明实施例的分布式定时任务调度方法可以看出,通过统一配置定时任务,在定时任务被触发时,使用配置的路由规则过滤服务提供方,由过滤后的服务提供方执行定时任务,实现了多机器部署的任务调度,配置简单,部署方便,降低单点故障的风险,且便于维护;通过在配置中心配置限制任务执行地址信息,来过滤服务提供方,简化了配置内容;通过配置中心增加、删除、修改定时任务,实现了定时任务的动态配置;将任务的基本信息存储到数据库,在配置中心重启时,可以从数据库中获取定时任务,并添加到任务调度器,保证系统正常运行;通过配置中心统一配置服务调用方和服务提供方,配置简单,无需额外开发。
图9是根据本发明实施例的分布式定时任务调度系统的主要模块的示意图。如图9所示,本发明实施例的分布式定时任务调度系统900,主要包括:
配置中心901,用于配置定时任务的任务信息和对应的路由规则,将所述任务信息发送至任务调度器。配置中心需要配置定时任务的任务标识、任务调用信息和任务触发条件。其中,任务调用信息为执行定时任务所需调用的方法。任务触发条件即执行定时任务所需满足的条件,用于决定什么时候来执行定时任务,比如每秒执行一次、每分钟执行一次。路由规则用于规定服务调用方可以调用哪些服务提供方。
任务调度器902,用于在达到所述定时任务的任务触发条件时,将所述定时任务发送至服务调用方。任务调度器启动后,搜索需要执行的定时任务,当某个定时任务被触发,即达到该定时任务的任务触发条件时,将该定时任务发送至服务调用方。
服务调用方903,用于获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,将携带所述任务调用信息的调用请求发送至所述目标服务提供方,以使所述目标服务提供方从所述调用请求中解析出所述任务调用信息,执行所述任务调用信息指定的目标方法。
服务提供方预先向Dubbo服务注册,服务调用方获取已注册的服务提供方的地址信息,在接收到定时任务后,使用该定时任务对应的路由规则对服务提供方进行过滤,得到目标服务提供方;之后向目标服务提供方发送携带任务调用信息的调用请求。
目标服务提供方从所述调用请求中解析出所述任务调用信息,执行所述任务调用信息指定的目标方法;其中,所述目标方法为所述定时任务执行的任务逻辑。目标服务提供方从调用请求中解析出任务调用信息,执行该任务调用信息中的目标方法,而目标方法中编写有定时任务执行的任务逻辑,故目标方法执行完成,即代表定时任务执行完毕。
图10是根据本发明实施例的分布式定时任务调度系统的系统架构示意图。如图10所示,本发明实施例的分布式定时任务调度系统1000,主要包括:
任务管理模块1001、Dubbo服务1002和任务执行模块1003。其中,任务管理模块1001包括配置中心901、任务调度器902和服务调用方903。任务管理模块1001用于动态配置定时任务、服务调用方、服务提供方和路由规则,当定时任务被触发时,对已注册到Dubbo服务1002的全部服务提供方进行过滤。
Dubbo服务1002用于利用负载均衡策略、集群容错策略等从过滤后的服务提供方中选择出一个目标服务提供方,以实现路由分配。任务执行模块1003用于执行具体的定时任务,包括多个服务提供方,且目标服务提供方为多个服务提供方中的一个。服务调用方和服务提供方需要先向Dubbo服务注册后,才能进行后续远程调用、运行定时任务的处理。各个模块所实现的具体功能如前所述,不再赘述。
从以上描述可以看出,通过统一配置定时任务,在定时任务被触发时,使用配置的路由规则过滤服务提供方,由过滤后的服务提供方执行定时任务,实现了多机器部署的任务调度,配置简单,部署方便,降低单点故障的风险,且便于维护。
图11示出了可以应用本发明实施例的分布式定时任务调度方法或分布式定时任务调度系统的示例性系统架构1100。
如图11所示,系统架构1100可以包括终端设备1101、1102、1103,网络1104和服务器1105。网络1104用以在终端设备1101、1102、1103和服务器1105之间提供通信链路的介质。网络1104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备1101、1102、1103通过网络1104与服务器1105交互,以接收或发送消息等。终端设备1101、1102、1103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备1101、1102、1103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器1105可以是提供各种服务的服务器,例如对管理员利用终端设备1101、1102、1103发送的调用请求进行处理的后台管理服务器。后台管理服务器可以从调用请求中解析出任务调用信息,执行其中的目标方法,并将处理结果(例如执行结果)反馈给终端设备。
需要说明的是,本申请实施例所提供的分布式定时任务调度方法一般由服务器1105执行,相应地,分布式定时任务调度系统一般设置于服务器1105中。
应该理解,图11中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
根据本发明的实施例,本发明还提供了一种电子设备和一种计算机可读介质。
本发明的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的一种分布式定时任务调度方法。
本发明的计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的一种分布式定时任务调度方法。
下面参考图12,其示出了适用于来实现本发明实施例的电子设备的计算机系统1200的结构示意图。图12示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图12所示,计算机系统1200包括中央处理单元(CPU)1201,其可以根据存储在只读存储器(ROM)1202中的程序或者从存储部分1208加载到随机访问存储器(RAM)1203中的程序而执行各种适当的动作和处理。在RAM 1203中,还存储有计算机系统1200操作所需的各种程序和数据。CPU 1201、ROM 1202以及RAM 1203通过总线1204彼此相连。输入/输出(I/O)接口1205也连接至总线1204。
以下部件连接至I/O接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1207;包括硬盘等的存储部分1208;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至I/O接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入存储部分1208。
特别地,根据本发明公开的实施例,上文主要步骤图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(CPU)1201执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括配置中心和任务调度器。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,配置中心还可以被描述为“配置定时任务的任务信息和对应的路由规则,将所述任务信息发送至任务调度器的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:配置中心配置定时任务的任务信息和对应的路由规则,将所述任务信息发送至任务调度器;其中,所述任务信息包括任务标识、任务调用信息和任务触发条件;所述任务调度器在达到所述定时任务的任务触发条件时,将所述定时任务发送至服务调用方;所述服务调用方获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,将携带所述任务调用信息的调用请求发送至所述目标服务提供方,以使所述目标服务提供方从所述调用请求中解析出所述任务调用信息,执行所述任务调用信息指定的目标方法;其中,所述目标方法为所述定时任务执行的任务逻辑。
根据本发明实施例的技术方案,通过统一配置定时任务,在定时任务被触发时,使用配置的路由规则过滤服务提供方,由过滤后的服务提供方执行定时任务,实现了多机器部署的任务调度,配置简单,部署方便,降低单点故障的风险,且便于维护。
上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (12)

1.一种分布式定时任务调度系统,其特征在于,包括:
配置中心,用于配置定时任务的任务信息和对应的路由规则,将所述任务信息发送至任务调度器;其中,所述任务信息包括任务标识、任务调用信息和任务触发条件;
所述任务调度器,用于在达到所述定时任务的任务触发条件时,将所述定时任务发送至服务调用方;
所述服务调用方,用于获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,将携带所述任务调用信息的调用请求发送至所述目标服务提供方,以使所述目标服务提供方从所述调用请求中解析出所述任务调用信息,执行所述任务调用信息指定的目标方法;其中,所述目标方法为所述定时任务执行的任务逻辑。
2.根据权利要求1所述的系统,其特征在于,所述路由规则包括限制任务执行地址信息;
所述服务调用方,还用于实现路由接口,重写路由方法,通过执行所述路由方法来获取已注册的服务提供方的地址信息,将所述限制任务执行地址信息与所述地址信息进行比较,筛选出包含在所述限制任务执行地址信息的地址信息,将筛选出的地址信息对应的服务提供方作为目标服务提供方。
3.根据权利要求1所述的系统,其特征在于,所述任务信息还包括任务状态;所述配置中心,还用于:当接收到新增任务指令时,执行新增任务逻辑;其中,所述新增任务逻辑的实现包括:
确定待增加任务的任务状态为启用状态,构建用于描述所述待增加任务的JobDetail对象和Trigger对象;其中,所述待增加任务为所述新增任务指令指定的定时任务,所述Trigger对象用于描述所述待增加任务的任务触发条件;以及
将所述JobDetail对象和所述Trigger对象注册到所述任务调度器,启动所述任务调度器。
4.根据权利要求3所述的系统,其特征在于,所述配置中心,还用于:当接收到删除任务指令时,执行删除任务逻辑;其中,所述删除任务逻辑的实现包括:
确定待删除任务的任务状态为所述启用状态,获取用于描述所述待删除任务的JobDetail对象;其中,所述待删除任务为所述删除任务指令指定的定时任务;以及
确定所述待删除任务的JobDetail对象不为空,停止并移除所述待删除任务的Trigger对象,删除所述待删除任务。
5.根据权利要求4所述的系统,其特征在于,所述新增任务逻辑的实现还包括:将所述待增加任务的基本信息存储到数据库;
所述删除任务逻辑的实现还包括:根据为所述待删除任务设定的主键,从所述数据库中删除所述待删除任务的基本信息。
6.根据权利要求4或5所述的系统,其特征在于,所述配置中心,还用于:当接收到修改任务指令时,将待修改任务作为所述待删除任务,执行所述删除任务逻辑;其中,所述待修改任务为所述修改任务指令指定的定时任务;以及
将所述待修改任务作为所述待增加任务,执行所述新增任务逻辑。
7.根据权利要求5所述的系统,其特征在于,所述基本信息包括所述任务状态;所述配置中心,还用于:当接收到重启指令时,从所述数据库中获取所述启用状态的定时任务,将获取的定时任务添加到所述任务调度器。
8.根据权利要求1所述的系统,其特征在于,所述配置中心还用于,配置所述服务调用方的第一服务配置信息,以及所述服务提供方的第二服务配置信息;
所述目标服务提供方,还用于引入所述第二服务配置信息,根据所述第二服务配置信息创建任务bean,将所述任务bean注入Spring容器。
9.一种分布式定时任务调度方法,其特征在于,包括:
配置中心配置定时任务的任务信息和对应的路由规则,将所述任务信息发送至任务调度器;其中,所述任务信息包括任务标识、任务调用信息和任务触发条件;
所述任务调度器在达到所述定时任务的任务触发条件时,将所述定时任务发送至服务调用方;
所述服务调用方获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,将携带所述任务调用信息的调用请求发送至所述目标服务提供方,以使所述目标服务提供方从所述调用请求中解析出所述任务调用信息,执行所述任务调用信息指定的目标方法;其中,所述目标方法为所述定时任务执行的任务逻辑。
10.根据权利要求9所述的方法,其特征在于,所述路由规则包括限制任务执行地址信息;
所述服务调用方获取已注册的服务提供方的地址信息,使用所述定时任务对应的路由规则过滤所述地址信息,筛选出满足所述路由规则的目标服务提供方,包括:
实现路由接口,重写路由方法,通过执行所述路由方法来获取已注册的服务提供方的地址信息,将所述限制任务执行地址信息与所述地址信息进行比较,筛选出包含在所述限制任务执行地址信息的地址信息,将筛选出的地址信息对应的服务提供方作为目标服务提供方。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求9-10中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求9-10中任一所述的方法。
CN202010560748.2A 2020-06-18 2020-06-18 一种分布式定时任务调度系统和方法 Pending CN113760481A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010560748.2A CN113760481A (zh) 2020-06-18 2020-06-18 一种分布式定时任务调度系统和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010560748.2A CN113760481A (zh) 2020-06-18 2020-06-18 一种分布式定时任务调度系统和方法

Publications (1)

Publication Number Publication Date
CN113760481A true CN113760481A (zh) 2021-12-07

Family

ID=78785482

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010560748.2A Pending CN113760481A (zh) 2020-06-18 2020-06-18 一种分布式定时任务调度系统和方法

Country Status (1)

Country Link
CN (1) CN113760481A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114726787A (zh) * 2022-04-11 2022-07-08 阿里巴巴(中国)有限公司 应用于rpc框架的路由方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114726787A (zh) * 2022-04-11 2022-07-08 阿里巴巴(中国)有限公司 应用于rpc框架的路由方法及系统
CN114726787B (zh) * 2022-04-11 2023-08-25 阿里巴巴(中国)有限公司 应用于rpc框架的路由方法及系统

Similar Documents

Publication Publication Date Title
US10776175B1 (en) Solver for cluster management system
CN108737270B (zh) 一种服务器集群的资源管理方法和装置
US9942273B2 (en) Dynamic detection and reconfiguration of a multi-tenant service
US10452372B2 (en) Method and deployment module for managing a container to be deployed on a software platform
US8910138B2 (en) Hot pluggable extensions for access management system
KR20110040934A (ko) 지능형 모바일 디바이스 매니지먼트 클라이언트
US8650288B2 (en) Runtime usage analysis for a distributed policy enforcement system
JP2016521897A (ja) アプリケーションアップグレード方法および装置
CN109783562B (zh) 一种业务处理方法和装置
WO2024077885A1 (zh) 容器集群的管理方法、装置、设备及非易失性可读存储介质
WO2024002299A1 (zh) 应用管理方法、应用订阅方法及相关设备
CN110795741A (zh) 对数据进行安全性处理的方法和装置
CN113672357A (zh) 任务调度的方法、装置和系统
US11593192B2 (en) Detecting resource redundancy and conflicts in a heterogeneous computing environment
WO2006111001A1 (en) System and method of waste management
CN113760481A (zh) 一种分布式定时任务调度系统和方法
CN116233217B (zh) 基于路由的页面跳转方法、装置、电子设备及存储介质
US11210347B2 (en) Object search with pagination and non-duplicates support
CN111382953A (zh) 一种动态流程生成方法和装置
CN113535419A (zh) 一种服务编排方法和装置
CN115080274A (zh) 业务处理方法、装置和系统、以及接口映射系统
CN114528140A (zh) 一种业务降级的方法和装置
CN114461424A (zh) 单元化部署架构下的单元间服务发现方法、装置及系统
CN112905273A (zh) 一种服务调用方法和装置
CN113765983A (zh) 一种站点服务的部署方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination