《从零构建分布式定时任务系统的思路与实践》

48 阅读1分钟

定时任务在后端系统中无处不在:数据同步、日志清理、定期统计等。然而,在分布式架构下,定时任务带来并发、重复执行、调度可靠性等问题。

1. 单节点定时任务的局限

传统方式使用 cronSpring @Scheduled。缺点:

  • 多实例部署后任务可能被多次执行。
  • 节点宕机会导致任务中断。
  • 缺乏统一管理与监控。

2. 分布式任务调度的核心问题

  1. 任务唯一执行:必须保证集群中只有一个节点执行同一任务。
  2. 任务分片与并行:大任务拆分到多个节点并行执行。
  3. 任务可视化管理:支持配置、暂停、重试。
  4. 容错与补偿机制:节点异常后自动切换。

3. 常见分布式任务框架

  • xxl-job:轻量级,支持分片、执行日志、失败重试。
  • ElasticJob:基于 ZooKeeper 实现任务分片和容错。
  • Quartz + Redis/ZooKeeper:可自行封装分布式锁,保证任务唯一。

4. 自研系统设计要点

  • 调度中心:统一下发任务,记录状态。
  • 执行节点:通过分布式锁竞争任务执行权。
  • 任务持久化:记录执行结果与耗时。
  • 告警机制:任务失败自动告警。

5. 实战案例

电商日结任务:每晚 1 点结算订单佣金。

  • 使用 xxl-job 统一调度。
  • 分片规则按商户 ID 分配,保证并发安全。
  • 失败重试 + 告警机制确保可靠性。

结论:分布式任务系统的核心是协调与控制。稳定调度比功能复杂更重要。