实践_定时任务开发规范

定时任务开发规范

1. 背景

定时任务通常存在以下特点:

  • 开发过程中没有界面,全靠自测
  • 性能受数据量影响
  • 数据恢复困难
    因此定时同步任务成为了bug重灾区,小则导致特性发布延期,大则引发大面积生产故障。基于诸多因素,指定了定时同步任务开发规范供参考使用。

2. 开发规范

2.1 场景分析
  • 全量更新:每次更新前,删除本地数据,从上游全量同步数据。这种模式适合数据量较小的定时任务。
  • 增量更新:普遍采用的策略,可以减少数据库操作,减少网络请求。需要数据源提供修改时间的字段,并及时更新。定时任务在处理数据时,利用修改时间来判断数据的新鲜度。
2.2 性能评估
  • 预估数据量
  • 预测单次时间:加载数据到内存中,减少数据库查询、网络请求
  • 预估每次受影响数据量
2.3 发布验证

定时任务的自动触发时间一般设置在深夜,当代码变更上线后,无法立即验证程序的正确性。因此,对定时任务提出了两个需求:

  • 上线后立即进行测试,通过暴露接口,使得开发者可以立即触发定时任务。
  • 部分数据展示,定时任务涉及的业务数据,应当暴露一小部分非敏感数据,以便验证。
2.4 注意事项
  • 设置定时任务时间,一般都在晚上凌晨左右
  • 定时任务要加锁,确保定时任务是在单个实例下运行,避免多实例同时运行引发问题
  • 通过配置开关控制定时任务是否要开启运行
  • 查询待处理数据通过分页方式查询,每页查询大小(batchUserPageSize)可根据配置文件自行配置
  • 分批处理数据提交事务,事务的隔离性能够保证数据的影响范围降到最小
  • 记录本次定时任务的详细日志,如:操作结果详情,定时任务耗时,错误日志

你可能感兴趣的:(java)