本发明涉及定时任务调度的,尤其涉及一种用于集群环境去中心化的定时任务调度方法及系统。
背景技术:
1、在大型系统中,为了实现高并发和高可用性,往往采用集群方式部署,即同一套程序部署到多台服务器上,形成多个系统实例,当程序中包含定时任务时,多台服务器上的定时任务可能会同时启动,造成重复数据或者程序异常等问题,业界常用的解决方法为单独部署一套中心化的调度系统来统一调度定时任务,或者采用分布式锁防止同一时间定时任务在多台服务器上同时执行。但是仍存在一些缺点:
2、使用中心化调度系统的方法:不仅需要增加服务器资源,业务系统还需要进行一定的配套改造来适应调度系统,增加了系统复杂度和建设成本;当中心化调度系统出现故障,将导致所有定时任务不能执行。
3、使用分布式锁的方法:当任务需要执行较长时间时,分布式锁占用时间长,会导致锁超时失效,其他服务器就有可能获得锁而造成任务同时执行执行;当任务执行过程中出现服务器故障停止后,分布式锁未能及时释放,会导致所有服务器都未能获得锁而造成任务未执行;当服务器时钟快慢不同时,一台服务器由于时钟快先执行了任务,另外一台服务器由于时钟慢,会再次获得锁来执行任务,导致同一时点的任务重复执行。
技术实现思路
1、本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例,在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
2、鉴于上述现有存在的问题,提出了本发明。
3、为解决上述技术问题,本发明提供如下技术方案:系统启动时,使用sql读取数据库中的定时任务列表到内存,创建并注册定时任务;
4、监控已注册的定时任务,到达某个定时任务的cron表达式时,触发所述定时任务;
5、读取所述数据库中的任务列表,得到所述定时任务的执行次数、最新执行ip、最新随机字符串;
6、判断被触发的所述定时任务是否需要在本服务器执行,当需要在本服务器执行时,则将内存中的任务执行次数设置为数据库中的任务执行次数加1;
7、使用tcp协议向所述最新执行ip所指服务器发送任务查询请求;
8、所述最新执行ip所指服务器接收到查询请求,检查线程池是否有名称为所述定时任务名称的线程并返回结果,当返回结果为否时,尝试将数据库任务列表中所述定时任务的最新执行ip更新为本服务器的ip;
9、当更新成功时,在线程池中创建名称为所述定时任务名称的线程,并在所述线程中执行所述定时任务;
10、所述定时任务执行结束后,将所述数据库任务列表中所述定时任务的执行次数加1。
11、作为本发明所述的用于集群环境去中心化的定时任务调度方法的一种优选方案,触发所述定时任务,包括:
12、任务触发类crontrigger在注册后,计划任务注册器scheduledtaskregistrar会监控服务器时钟,当时钟的时间符合cron表达式时,就会启动任务调度类taskdispatcher。
13、作为本发明所述的用于集群环境去中心化的定时任务调度方法的一种优选方案,当所述定时任务不需要在本服务器执行时,则将内存中的任务执行次数设置为数据库中的任务执行次数,任务执行中止;
14、当需要在本服务器执行时,则将内存中的任务执行次数设置为数据库中的任务执行次数加1。
15、作为本发明所述的用于集群环境去中心化的定时任务调度方法的一种优选方案,所述返回结果包括两种情况,其中:
16、当返回结果为是时,任务执行中止;
17、当返回结果为否时,尝试将数据库任务列表中该任务的最新执行ip更新为本服务器的ip;
18、当更新失败时,表示随机字符串已被其他服务器更新,任务执行中止。
19、作为本发明所述的用于集群环境去中心化的定时任务调度方法的一种优选方案,尝试将数据库任务列表中该任务的最新执行ip更新为本服务器的ip,包括:
20、新生成一个随机字符串,使用最新随机字符串和定时任务名称作为更新条件,将新生成的随机字符串更新和本服务器的ip更新到表中。
21、作为本发明所述的用于集群环境去中心化的定时任务调度方法的一种优选方案,定时任务列表包含的字段,包括定时任务名称、cron表达式、执行次数、最新执行ip、最新随机字符串。
22、作为本发明所述的用于集群环境去中心化的定时任务调度系统的一种优选方案,包括任务注册模块、任务调度模块、任务检查模块和数据库,其中:
23、所述任务注册模块,用于系统启动时,读取数据库中的定时任务列表,根据定时任务列表创建并注册定时任务;
24、所述任务调度模块,用于定时任务被触发时,检查所述定时任务是否同时或重复执行,根据检查结果决定是否需要执行该任务,并在执行所述定时任务后更新数据库中的定时任务列表;
25、所述任务检查模块,用于响应所述任务调度模块发送的任务查询请求,查询本服务器的线程池是否有名称为所查任务名称的线程;
26、所述数据库,用于保存定时任务列表。
27、作为本发明所述的用于集群环境去中心化的定时任务调度系统的一种优选方案,还包括:
28、一个或多个处理器;
29、存储器,存储可被操作的指令,所述指令在通过所述一个或多个处理器执行时使得所述一个或多个处理器执行操作,所述操作包括如前述用于集群环境去中心化的定时任务调度方法的流程。
30、本发明的有益效果:
31、1、实现灵活任务管理:使用cron表达式来定义任务的执行时间,提供了高度的灵活性和精确度,使得系统能够根据不同的业务需求进行定制和优化,包括但不限于任务的创建、注册、触发、执行和更新;
32、2、提升任务执行效率:通过生成随机字符串并使用该字符串作为更新条件,有效防止了多个节点同时执行同一任务的情况,确保了任务执行的唯一性和准确性,动态更新任务的执行ip,可以确保任务在最合适的服务器上执行,提高任务执行的效率;
33、3、增强系统容错能力:通过中止机制和错误处理,提高了系统的容错性,即使在部分组件失败的情况下也能保持稳定运行,这种容错机制确保了任务的高可用性,减少了因节点故障导致的任务中断。
1.一种用于集群环境去中心化的定时任务调度方法,其特征在于,包括:
2.根据权利要求1所述的用于集群环境去中心化的定时任务调度方法,其特征在于,触发所述定时任务,包括:
3.根据权利要求1所述的用于集群环境去中心化的定时任务调度方法,其特征在于,当所述定时任务不需要在本服务器执行时,则将内存中的任务执行次数设置为数据库中的任务执行次数,任务执行中止;
4.根据权利要求1所述的用于集群环境去中心化的定时任务调度方法,其特征在于,所述返回结果包括两种情况,其中:
5.根据权利要求4所述的用于集群环境去中心化的定时任务调度方法,其特征在于,尝试将数据库任务列表中该任务的最新执行ip更新为本服务器的ip,包括:
6.根据权利要求1所述的用于集群环境去中心化的定时任务调度方法,其特征在于,定时任务列表包含的字段,包括定时任务名称、cron表达式、执行次数、最新执行ip、最新随机字符串。
7.一种用于集群环境去中心化的定时任务调度系统,其特征在于,包括任务注册模块、任务调度模块、任务检查模块和数据库,其中:
8.根据权利要求7所述的用于集群环境去中心化的定时任务调度系统,其特征在于,还包括: