分布式调度引擎elastic-job3源码分析(一) 概述
1. 背景
调度引擎是关键的基础设施,不但是定时执行任务,更是大规模分布式任务引擎,分布式并行处理平台,管理计算节点集群,提供高吞吐的可伸缩的数据处理能力。
公司日益增长的业务,对调度引擎高吞吐,高并发的要求也快速增长,需构建一个无中心,管理大集群,健壮分片容错的任务调度任务平台,支撑业务发展。
同时,分布式调度引擎也是datax,可观测-性能指标组件(sentinel dashboard)分布式改造的核心技术
2. 参考
https://blog.csdn.net/X5fnncxzq4/article/details/86770194
https://www.jianshu.com/nb/18843035
3. 术语
4. 整体架构

lite-job
- bootstrap 作业api启动
- spring 启动
- 作业管理 console/api管理作业
- 核心服务
生态(eco) 用户可扩展或很可能需自定义的组件,包括作业事件跟踪,目前实现数据库存储;异常处理,目前支持,钉钉,微信,邮件;执行器
基础组件(infra) 服务注册中心,基于zookeeper
5. 核心服务

核心服务比较多,大致分为以下几类
Ø 作业类服务
调度服务/trigger服务/配置服务/设置服务/分片服务
Ø 分布式类服务
选主服务/失效转移/运行实例服务/server节点服务/诊断服务/ znode存储服务/监听服务
Ø 监控类服务
快照服务
代码特色:
Ø 门面类façade 以Facade结尾,聚合服务类,为使用者提供统一的调用入口
Ø 服务类 service,核心服务的逻辑
Ø znode类 node/path,Node/Path结尾,封装zk节点管理
Ø 监听管理器类/监听器类 核心服务大多使用监听服务监听zk变化实现分布式协调
6. 分析概览
列出分析要点
6.1 作业和执行器
分析作业和执行器设计
6.2 作业注册和调度
spring boot starter,即时(一次)作业, 定时作业
6.3 作业分片执行
作业调起和分片执行
6.4 核心服务
设置服务(setup),znode存储(storage) ,监听服务(listener),调度服务(schedule),
选主服务(election),分片服务(sharding),配置服务(config),失效转移(failover),
快照服务(snapshot),服务实例(server),运行实例(instance),诊断服务(reconcile),保障服务(guarantee)
其中,调度服务不单独分析,放到作业注册,作业执行一起分析
6.5 基础
执行器(executor)
6.6 生态
注册中心(regcenter)
作业配置注册,作业注册,服务节点注册,作业实例注册,分片注册,分片分配注册
7 问题和规划
elastic-job3问题及规划
7.1 网格分片
elastic-job实现的是纵向分片,相当于数据hash分片,这样的粒度是不够的,需要增加横向的切分,即分页,这样每个分片规模可预期,同时增加并行度
7.2 逻辑分片
分片藏在分片算法,不需预先配置分片,按需生成,减少分片配置项长度,支持动态分片
7.3 动态分片
elastic-job是静态分片,存在2个问题
1. 数据倾斜,即,部分作业数据少,早完成;另一些任务还有大量数据未完成
2. 分片很多,配置相当长
动态分片实例节点按需领取,配合逻辑分片,最大化利用计算资源
7.4 动态作业
动态增删作业,新增作业有两种情况,新增新类型的作业,新增已有类型作业的实例
elastic-job无中心分布式架构,没有提供动态增加作业(实例)的api,新增新类型的作业需新的作业实例,新增已有类型实例可以通过修改分片和参数间接实现
7.5 监控快照
快照服务改造,接入Prometheus exporter,增加作业状态,数据处理量等