在大型系统中,任务调度是一项基础性的需求。对于一些需要重复、定时执行或者耗时比较长的任务经常会被剥离出来单独处理,而随着任务规模与复杂性的上升,任务调度系统也就随需而生。设计良好的任务调度系统具备可靠性及伸缩性,它可以管理并监控任务的执行流程,以保证任务的正确执行。
Java
原生支持
- java.util.Timer.scheduleAtFixedRate
- java.util.concurrent.ScheduledThreadPoolExecutor
第三方框架
QuartZ,一句话来形容它。
Java领域最强大、最丰富的任务调度框架。
很多开源的任务调度框架,都是基于QuartZ的。
Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架,基于成熟的开源产品Quartz和Zookeeper及其客户端Curator进行二次开发
Ruby
rufus-scheduler,Ruby的scheduler,支持at, in, cron 和 every jobs。
很强大,用法也很简单
Golang
原生支持
time,结合ticker
第三方框架
-
kingtask,是一个由Go开发的异步任务系统,由kingshard的作者flike贡献。
-
machinery,基于分布式消息的异步队列/任务系统。
-
cron,基本是linux crontab的Go实现,做了一些优化,但是并不会等待执行结果再执行下一次,而是到时间就继续执行。
-
scheduler,基于cron,借鉴python库的scheduler实现的任务调度系统,且他的任务执行是根据上一次执行结束再开始下一次执行的。 类似于java.util.Timer.schedule.
后面将会进行源码分析,尽请期待😄。
延伸阅读
- Quartz教程一:使用quartz
- rufus-scheduler
- 当当网分布式任务调度框架
- awesome-go
- kingtask
- scheduler
- cron
- machinery
- 轻量级分布式任务调度框架
- 当当网分布式任务调度框架
本文是“茶歇驿站”原创,多谢大家支持。