分布式多任务调度的初探

一、Quartz

在java编程中,常用的比较出名的任务调度工具是Quartz,该工具提供丰富的接口来帮助我们实现基于Cron Expression的定时任务以及按照固定频率执行任务等。在运行过程中,该工具会创建线程池,所有任务会在线程池中运行,注意默认的线程池中线程数量有限,仅有10个线程,可以通过程序修改线程池的容量。当提交的job多于线程池的容量的时候,多余的job会在等待队列里进行等待,如果有一些提交的job属于长时间运行或者阻塞的任务,这样的job多于线程池的容量的时候就会导致一些job长时间处在等待队列里不能运行,这时候调度器处于阻塞状态。针对这个问题,可以采用增加线程池的容量的方法处理。

Quartz也支持分布式的实现,任务状态信息都存储在数据库中,基于数据库引擎及 High-Available 的策略(集群的一种策略)自动协调每个节点的 Quartz。不过Quartz在实现过程中效率相对低下,因为对于任务量比较大的场景下,会涉及到频繁的任务切换,进而会涉及频繁的加锁和解锁,甚至会带来集群间的主线程等待。

 

 

二、Elastic-Job,LTS, Niubi-Job

    这三者的定位就是要执行高效的分布式任务调度,这三者都是开源的,可以直接从Github上找到,都有一定的文档参考。目前对这三者处于了解阶段,后续如果有进一步发现,再进行进一步的总结。

 

LTS: https://github.com/qq254963746/light-task-schedule

Elastic-Job: https://github.com/dangdangdotcom/elastic-job

Niubi-Job: https://github.com/xiaolongzuo/niubi-job


你可能感兴趣的:(分布式Job)