前言
现实世界中,我们经常会面对这样的情况,比如:我们定了早晨7:00的闹铃,到了7:00闹铃会把我们叫醒。我们醒了之后,把闹铃关掉。
大家有没有发现,我们做了两件事,第一、我们醒了;第二、我们关了闹铃。
这事情是怎么发生的?
其一、7:00到了,闹钟把我们叫醒了。 抽象:时间触发事件。
其二、我们醒了,关掉闹铃。 抽象:事件触发事件。
总的来说就是,时间驱动和事件驱动。
现在软件定义世界,日常工作和学习通过软件定义之后,我们可以把刚才的“我们醒了”和“我们关掉闹钟” 抽象成任务,即要的事。
那“闹铃响了”和“我们醒了” 抽象成触发条件。
有哪些定时任务框架呢?
单机
- Linux 服务器 :Linux Crontab 定时任务【cron搭配shell脚本】
- Window服务器: 控制面板—>管理工具—>任务计划程序【未实践,可自行测试】
- 软件进程: 【以 java 为例】
- 工具类:Timer类、注解(@Scheduled)
- 框架: Quartz
分布式调度框架【各家公司的产品】
- 阿里 :Schedulerx2.0【非常不错,】
- Linkedin :【Azkaban开源的工作流管理器,轻量级调度框架】
- 大众点评:xxl-job【 www.xuxueli.com/xxl-job/#/ 】
- 当当网 :Elastic-job【】
- 唯品会 :Saturn【#/】
- Apache Oozie:功能强大,配置复杂的 Hadoop 任务调度框架
- AirFlow:基于 Python 开发的通用批处理调度框架
- EasyScheduler:国内开源的分布式工作流任务调度系统
思辨
- 单机 VS 分布式?
毫无疑问,生产环境肯定要分布式,无需辩驳。单机的话,越简单的方式越好。
- 分布式之开源框架 VS 云产品
如自己维护服务器,则选择开源的,有大公司背书的和有不错文档的, Azkaban还不错。
云原生时代,鉴于你使用的云是哪家的?则选择云上的分布式调度框架即可。
阿里云 的话,SchedulerX不用考虑了,直接用之。
那如果是AWS呢?容我研究一下。