elastic-job源码及原理解析

专栏导航

Elastic-Job 的发展历程、核心特性(Lite 与 Cloud)

Elastic-Job 是一个分布式任务调度解决方案,由当当网开源并在 Apache 基金会孵化。该项目最初于 2015 年发布,旨在解决分布式环境下任务调度的可靠性、性能和扩展性问题。

发展历程

早期阶段(2015-2017)

Elastic-Job 1.x 版本作为当当网内部解决方案诞生,主要解决单点任务调度的高可用问题。早期的设计理念聚焦于:

  • 基于 Zookeeper 的分布式协调
  • 任务分片机制
  • 统一的作业调度中心

2.x 架构升级(2017-2019)

2.x 版本进行了架构重构,划分为 Elastic-Job-Lite 和 Elastic-Job-Cloud 两个独立产品线:

  • Lite:轻量级解决方案,运维成本低
  • Cloud:基于 Mesos 的云原生方案,支持更复杂的资源调度

3.x 现代化(2020-至今)

3.x 版本拥抱云原生理念:

  • 移除对 Zookeeper 的强依赖,支持 Consul、Etcd 等多种注册中心
  • 提供 Spring Boot Starter,便于集成
  • 支持多语言作业执行

核心特性

Elastic-Job-Lite

轻量级分布式任务调度解决方案,适用于大多数业务场景。

核心功能:

特性 说明
定时任务 支持 cron 表达式配置,精确控制执行时间
分片广播 将任务拆分为多个分片并行执行
失败重试 任务失败后自动重试,支持最大重试次数配置
幂等设计 保证任务不会重复执行
监控告警 提供作业运行状态的实时监控

架构特点:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   App       │     │   App       │     │   App       │
│  (Leader)   │     │  (Follower) │     │  (Follower) │
└─────┬───────┘     └─────┬───────┘     └─────┬───────┘
      │                   │                   │
      └───────────────────┼───────────────────┘
                          │
                   ┌──────┴──────┐
                   │   Zookeeper │
                   │   /elasticjob   │
                   └─────────────┘

配置示例:

@ElasticJobSharding(item = "0,1,2", threadCount = 10)
public class MyJob implements SimpleJob {
    @Override
    public void execute(ShardingContext context) {
        // 任务逻辑
    }
}

Elastic-Job-Cloud

云原生分布式任务调度方案,基于 Mesos 资源管理。

核心功能:

特性 说明
资源调度 基于 Mesos 实现 CPU、内存资源的动态分配
作业分发 支持将作业分发到不同的执行节点
弹性扩缩容 根据负载自动调整执行器数量
多租户支持 支持资源隔离的多业务线接入

与 Lite 的区别:

对比项 Lite Cloud
部署模式 嵌入式(Jar 包引入) 独立部署
资源管理 应用自身管理 Mesos 统一管理
适用场景 中小规模 大规模、复杂调度
运维成本

技术原理

任务分片

Elastic-Job 将任务分为多个分片,每个分片可独立执行:

  1. 开发者定义分片总数(如 10 个分片)
  2. 调度器将分片均匀分配给各执行节点
  3. 各节点并行处理分配到的分片

选举机制

通过 Zookeeper/注册中心实现主节点选举:

  1. 所有执行节点向注册中心创建临时节点
  2. 最早创建成功的节点成为 Leader
  3. Leader 节点负责发布调度任务
  4. 其他节点作为 Follower 监听 Leader 状态

故障转移

当执行节点宕机时:

  1. 注册中心检测节点失联
  2. Leader 重新分配该节点的分片
  3. 其他存活节点接管任务执行

应用场景

典型场景

  • 数据同步:跨数据库、跨表的数据同步任务
  • 报表计算:定时生成业务报表
  • 批量处理:大流量数据的批量处理
  • 定时触发:如优惠券发放、订单超时处理

使用建议

  1. 根据业务规模选择 Lite 或 Cloud 版本
  2. 合理设计任务分片数,避免分片过多导致调度开销
  3. 任务执行时间不易过长,建议控制在分钟级别
  4. 做好任务执行的幂等性设计

总结

Elastic-Job 作为成熟的分布式任务调度框架,凭借其丰富的特性、稳定的性能和灵活的架构设计,在国内外众多企业中得到广泛应用。Lite 版本适合大多数业务场景,而 Cloud 版本则为大规模云原生应用提供了强大的调度能力。

相关阅读:分布式任务调度场景与挑战

所有评论

关于我 备案号:蜀ICP备2023042032号-3