一:业务场景
- 定时爬虫,每隔半小时或一小时爬取数据.
- 每日凌晨写入数据仓库.
- 定时检查系统环境.
平时工作中,经常会有一些需要固定时间的操作,一般我们会写定时脚本放在服务器上跑。
二:解决方案
1.timer定时
可以利用语言自带函数来实现延时任务。或是加入队列中。
2.linux 的crontab。
利用Linux的系统定时任务来跑一些固定时间的脚本。
3.分布式定时任务框架,如TBSchedule。
一些简单的脚本,通过crontab就可以操作,但缺点也是显而易见的,非分布式,容易发生单点故障,也缺乏报警机制,但是使用quartz这些略显笨重。
昨天听了微博话题架构师的分享,他推荐了elastic-job这个分布式定时任务框架,非常灵活,支持弹性扩容和容灾,并且提供了非常友好的集中管理方式。同时,他分享了自己开发的PHPSchedule系统,基于crontab实现,十分轻量级,只是还未开源使用。
他还提供了一种利用crontab实现很简单的避免系统宕机影响定时任务的方法,将脚本部署在两台服务器,
交替运行法:
• 单小时A服务器
• 双小时B服务器
这样在出现故障时候,脚本会自动降级为两小时一次,不会直接死掉。
有了这个思路,有空可以撸一个管理crontab的工具,加上(自动重试、故障报警、分布式执行、良好的管理界面)就可以了。