一个好的定时任务

18 6月

定时任务在各类的系统中很常见。

以下是平时比较常接触到各类场景:

  1. 定时发送邮件/消息
  2. 周期行生成报表数据
  3. 定时数据同步
  4. 定时业务补偿,比如失败流程重新启动,超时流程自动关闭等

而大部分定时任务在运行上都比较偏向于低峰期,白天开始是高峰期,晚上又是发版期,在加上业务的要求,比如每天凌晨产出前一日的XX指标等,大量任务都是每天0~8点运行,这就极大增加了值班成本,出问题很难第一时间解决问题。

所以写一个好的定时任务,一方面减少线上问题的发生,另一方面也加快了解决问题的速度。

个人理解对于定时任务,“好”的标准应该是以下几个方面:

  1. 时间
  2. 执行成功率
  3. 通知和监控
  4. 处理异常

时间

对于时间有预估,超时报警,发现性能问题
这里的时间首先是最长执行耗时,当然对于耗时特别短的情况,也要有报警,避免异常结束。

执行成功率

外部依赖前置检测,比如关键外部依赖数据源,必须预先查询数据是否就绪。
对于外部接口如果幂等,可以增加调用重试机制,以降低失败概率
如果对于批量处理,可以接受少量失败的,那就可以做好异常隔离,避免某一条数据失败,造成整个任务失败。
另外支持指定参数,这个主要是针对一些特殊情况,包括修复数据,或者线上测试使用。

通知和监控

通知首先异常要杜绝漏报。其次就是关键指标的监控,可以使用

  1. 绝对值合理范围区间;
  2. 数据分布合理范围区间;
  3. 同环比变更合理范围区间;

处理异常

提供异常挂牌预案
异常之后任务应该可以重跑,至少做到以下几点:

  1. 幂等
  2. 数据回退
  3. 一键执行
  4. 对外透明

发表评论

电子邮件地址不会被公开。