本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2019/06/18/good-cron-job/
定时任务在各类的系统中很常见。
以下是平时比较常接触到各类场景:
- 定时发送邮件/消息
- 周期行生成报表数据
- 定时数据同步
- 定时业务补偿,比如失败流程重新启动,超时流程自动关闭等
而大部分定时任务在运行上都比较偏向于低峰期,白天开始是高峰期,晚上又是发版期,在加上业务的要求,比如每天凌晨产出前一日的XX指标等,大量任务都是每天0~8点运行,这就极大增加了值班成本,出问题很难第一时间解决问题。
所以写一个好的定时任务,一方面减少线上问题的发生,另一方面也加快了解决问题的速度。
个人理解对于定时任务,“好”的标准应该是以下几个方面:
- 时间
- 执行成功率
- 通知和监控
- 处理异常
时间
对于时间有预估,超时报警,发现性能问题
这里的时间首先是最长执行耗时,当然对于耗时特别短的情况,也要有报警,避免异常结束。
执行成功率
外部依赖前置检测,比如关键外部依赖数据源,必须预先查询数据是否就绪。
对于外部接口如果幂等,可以增加调用重试机制,以降低失败概率
如果对于批量处理,可以接受少量失败的,那就可以做好异常隔离,避免某一条数据失败,造成整个任务失败。
另外支持指定参数,这个主要是针对一些特殊情况,包括修复数据,或者线上测试使用。
通知和监控
通知首先异常要杜绝漏报。其次就是关键指标的监控,可以使用
- 绝对值合理范围区间;
- 数据分布合理范围区间;
- 同环比变更合理范围区间;
处理异常
提供异常挂牌预案
异常之后任务应该可以重跑,至少做到以下几点:
- 幂等
- 数据回退
- 一键执行
- 对外透明
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2019/06/18/good-cron-job/