分布式调度引擎 elastic-job3 源码分析 (二) 作业模型和注册
分布式调度引擎elastic-job3源码分析(三)-作业执行
分布式调度引擎elastic-job3源码分析(四)-核心服务 I
分布式调度引擎elastic-job3源码分析(五)-核心服务 II(vip)
分布式调度引擎elastic-job3源码分析(六)-失效转移(vip)
1. 背景
调度引擎是关键的基础设施,不但是定时执行任务,更是大规模分布式任务引擎,分布式并行处理平台,管理计算节点集群,提供高吞吐的可伸缩的数据处理能力。
公司日益增长的业务,对调度引擎高吞吐,高并发的要求也快速增长,需构建一个无中心,管理大集群,健壮分片容错的任务调度任务平台,支撑业务发展。
同时,分布式调度引擎也是 datax,可观测-性能指标组件(sentinel dashboard)分布式改造的核心技术
2. 参考
芋道源码 作业调度中间件 Elastic-Job 源码解析合集_芋道源码-优快云博客
3. 术语
无中心/有中心分布式 有中心分布式设置中心节点负责集群协调和元数据保存等工作,例如 xxl-job 的 admin/executor, dolphin-scheduler master-worker 都是有中心分布式设计;真正无中心设计很少,大部分是节点平等,都可以通过选举成为主节点,也就是,任何一个节点都可以成为中心
脑裂 无中心分布式设计,当网络出现问题,节点分割成多个集群,集群间因不能通讯而不能达到状态一致,通常解决方案是集群节点数奇数,节点数少于总数的集群中一半停止工作
分片/容错 分片是调度平台很重要的特性,调度处理大规模数据,需要分片执行,分片执行带来新的问题,分片失败,平台回收分片,转移到其他节点执行
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)
作业配置注册,作业注册,服务节点注册,作业实例注册,分片注册,分片分配注册
*生态还包括事件追踪(tracing), 错误处理(微信,钉钉,邮件,短信。。。),这两块本文不分析
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,增加作业状态,数据处理量等