不晓得你是否经历过手动配置
crontab
的经历,不知道你是否有过主机挂掉,crontab
也丢失的情况,不知道你是否经历过crontab
未执行成功却没有收到任何告警信息的情况,接下来我们来聊聊分布式调度平台。
为什么强调是分布式调度平台,系统原生的crontab
配置是单机的,如果机器挂掉,那机器上的任务自然而然的就不会再运行,如果是重要业务,那影响还是蛮大的。使用原生的crontab
, 也有可能你也经历过如下的几个问题:
•主机挂掉,任务没有跑成功,也就是没有高可用•任务没有跑成功,但是没有收到任何告警通知•间隔时间较短,而且任务比较耗时的情况下,上一个任务没结束,下一个任务就会启动,导致系统资源消耗严重•不清楚当前总共有多少任务再跑,成功率,失败率等等统统不清楚。•秒级别任务的定义(其实也能实现,就是有点黑魔法)•历史遗留的没有注释的任务,不清楚是其用途•因为机器上跑了很多任务导致机器性能下降,进一步导致业务性能受损
上述几个问题随便那个拎出来都是一个线上故障,那么我们该如何避免这种问题呢,我个人认为主要分几点吧:
•选型的时候不要局限于当前场景,保不齐过一阵子公司架构改变,难不成要从头再来•积极参与并把自己真实踩过的坑的经验提出来供大家参考•不要闭门造车,在业务量级很小的情况下的时候,虽然开源软件并不一定能满足需求•不能因为跑任务而影响业务(这个我相信),拆分 VS 资源控制?
•Quartz•XXL-JOB
•相对来说当前使用比较广泛,很多公司都是基于这个的基础上二开的•Elastic-Job•SIA-TASK•Cloudtask•Rundeck
•我个人比较喜欢的一个平台,功能不局限于任务调度,还能结合Jenkins
, Ansible
实现自动化运维,感兴趣的小伙伴可以看看
•其他•自研•二开
•完善的健康检测和告警机制•有问题应该及时通知到谁•node
有问题的情况下应该如何实现自动切换•完善的基于角色的权限控制体系•任务的添加维护不能局限于OPS
, 需要具备完善的自助添加任务的功能•足够简单•支持多种配置方式•资源耗用可监控,可控制
如果真的是需要使用系统原生的crontab
,依我个人经验,我有两个小建议
flock
flock
的原理是采用文件锁实现任务锁定,解决冲突。使用样例:
* * * * * flock -xn /tmp/zhuima.lock -c 'uptime'
多数情况下你会看到很多crontab
为了跟踪历史信息会打日志,但是写的命令都是采用>>
追加的方式往文件里输入,如果日志过大的情况下,很难去跟踪历史的信息,例如下面这种:
* * * * * uptime >> "/tmp/zhuima_job_uptime.log" 2>&1
那么如果我想要实现crontab
的日志也按天输出,那该如何实现,其实这个并不复杂,使用反单引号轻松即可实现, 如下图所示
* * * * * flock -xn /tmp/zhuima.lock -c "uptime >> "/tmp/zhuima_$(date +"\%Y-\%m-\%d").log"" 2>&1
探寻繁杂定时任务的解决方案:分布式任务调度系统[1]
一个轻量级的分布式定时任务调度平台-Cloudtask[2]
这些优秀的国产分布式任务调度系统,你用过几个? [3]
一个平台性的系统,从产品功能到技术架构都存在着方方面面的挑战,需要层层抽象和逐步优化才能完成一个成熟产品落地。在大数据时代,面对海量的数据和用户规模,任何一种架构设计,都面临着网络响应、 容错、幂等、数据可靠性/一致性等诸多问题。
上述描述摘自文档链接[4]
[1]
探寻繁杂定时任务的解决方案:分布式任务调度系统: https://juejin.im/post/5ea5a1d36fb9a03c642327d8
[2]
一个轻量级的分布式定时任务调度平台-Cloudtask: https://segmentfault.com/a/1190000013979750
[3]
这些优秀的国产分布式任务调度系统,你用过几个?: https://zhuanlan.zhihu.com/p/26493355
[4]
上述描述摘自文档链接: https://juejin.im/post/5ea5a1d36fb9a03c642327d8