如何使单应用支持十万以上的定时任务
在SchedulerX中创建的应用默认最多只支持1,000个任务,而在某些场景下1,000个任务远远满足不了业务需求。另外,实际业务场景中,不同定时任务的调度时间可能不一样。本文介绍如何通过一系列配置,使单应用能够支持上万,甚至十万以上的定时任务,并且不同任务能够有独立的调度时间。
应用场景
常见应用场景是每个定时任务调度时间都不一样,无法通过MapReduce分布式任务解决(MapReduce分布式任务每个子任务调度时间是一致的)。
物联网智能开关
智能开关可以设置定时开启、关闭,是由用户自定义设置的,所以每个开关的定时时间是不一致的。可以给每一个开关设置一个定时单机任务。在物联网场景下,定时单机任务可能会达到万、甚至十万级别。
业务监控
业务监控需要配置监控报警规则,一般每分钟轮询一次,符合规则则报警。大部分场景下使用一个MapReduce分布式任务是可以解决的,但是如果由于报警规则的复杂程度不同而导致执行时间差异较大时,有可能出现一个报警子任务没有执行完而阻塞整个任务下次调度。所以,可以给每个报警规则配置一个定时单机任务。当业务规模很大时,定时单机任务也可能达到万、甚至十万级别。
将SchedulerX作为底座
当将SchedulerX作为底座,封装一层任务调度平台(通过POP API新建任务)提供给自己的公司使用时,任务量也有可能达到万、甚至十万级别。
操作步骤
使单应用能够支持十万以上的定时任务,需要完成以下两个步骤:
联系SchedulerX技术支持人员,开启应用自动扩容。
开启应用自动扩容后,单应用的任务数达到上限(1000)后,会自动感知并分裂出一个新的子应用。
使用1.2.1及以上版本客户端接入SchedulerX,并开启共享ContainerPool功能。
本文以Spring Boot应用为例进行介绍,客户端接入详情请参见Spring Boot应用接入SchedulerX。如果您使用其它类型的应用接入,请参见 中的相关文档。
在应用的pom.xml文件中添加1.2.1及以上版本的客户端依赖。
1.2.1以下版本客户端不支持共享ContainerPool,所以请在应用中添加1.2.1及以上版本客户端,或将客户端的依赖升级到1.2.1及以上版本。更多客户端版本信息请参见客户端发布记录。
在应用的配置文件中添加共享ContainerPool配置。
spring.schedulerx2.shareContainerPool=true #开启所有任务共享线程池 spring.schedulerx2.sharePoolSize=128 #自定义共享线程池大小
说明如果未开启共享ContainerPool,每个任务触发都会新建一个线程池,客户端负载会因超负荷而发生异常。