分布式调度引擎 elastic-job3 源码分析 (一) 概述
分布式调度引擎elastic-job3源码分析(三)-作业执行
分布式调度引擎elastic-job3源码分析(四)-核心服务 I
分布式调度引擎elastic-job3源码分析(五)-核心服务 II(vip)
分布式调度引擎elastic-job3源码分析(六)-失效转移(vip)
1. 背景调度引擎是关键的基础设施,不但是定时执行任务,更是大规模分布式任务引擎,分布式并行处理平台,管理计算节点集群,提供高吞吐的可伸缩的数据处理能力。
公司日益增长的业务,对调度引擎高吞吐,高并发的要求也快速增长,需构建一个无中心,管理大集群,健壮分片容错的任务调度任务平台,支撑业务发展。
同时,分布式调度引擎也是 datax,可观测-性能指标组件(sentinel dashboard)分布式改造的核心技术
2. 参考芋道源码 作业调度中间件 Elastic-Job 源码解析合集_芋道源码-CSDN博客
elastic-job - 文集 - 简书
3. 术语无中心/有中心分布式 有中心分布式设置中心节点负责集群协调和元数据保存等工作,例如 xxl-job 的 admin/executor, dolphin-scheduler master-worker 都是有中心分布式设计;真正无中心设计很少,大部分是节点平等,都可以通过选举成为主节点,也就是,任何一个节点都可以成为中心
脑裂 无中心分布式设计,当网络出现问题,节点分割成多个集群,集群间因不能通讯而不能达到状态一致,通常解决方案是集群节点数奇数,节点数少于总数的集群中一半停止工作
分片/容错 分片是调度平台很重要的特性,调度处理大规模数据,需要分片执行,分片执行带来新的问题,分片失败,平台回收分片,转移到其他节点执行
4 详细分析服务可分为功能服务和核心服务,其中核心服务支撑功能服务的服务,功能任务有任务注册,任务执行,失效转移等,是调度平台的”业务”功能
5.1 作业模型和执行器设计ElasticJob 标记类
ElasticJobExecutor 作业执行逻辑,使用 JobItemExecutor 执行作业,在5.2 作业注册和调度进一步分析
JobItemExecutor 两类作业,Typed/Classed,Typed 类型作业实现远程调用执行器, 如 http,feign,不用实现作业类,作业进程是通用的执行节点,不会依赖作业业务;Classed 实现执行器/作业
SimpleJobExecutor/SimpleJob 简单作业实现,平台提供其他常用作业实现,如,script,http,dataflow,这是一对配套实现
5.2 作业注册和调度 1) 作业注册分为一次/定时两类一次/定时调度两者区分是有否 cron 配置,没有 cron 配置视为一次调度,使用触发服务触发作业执行,定时调度作业使用本地 quartz
2) 作业初始化spring boot starter
ElasticJobLiteAutoConfiguration spring boot 自动配置主入口,import 其他的自动配置
ElasticJobBootstrapConfiguration 从名字看出功能是初始化 JobBootstrap,从 ElasticJobProperties 获取 ElasticJob 实例,构建 JobBootstrap,注册到 SingletonBeanRegistry,spring bean 工厂可获取
ScheduleJobBootstrapStartupRunner CommandLineRunner 实现,spring bean 工厂获取 ScheduleJobBootstrap 实例,调度作业到本地 quartz
3) 作业注册和调度JobScheduler elastic-job 的调度器,作业执行环境初始化,构建和初始化 quartz scheduler
JobRegistry 单例,相当于作业执行上下文,管有作业的状态,调度器,注册中心
JobScheduleController quartz 调度器的封装
ScheduleJobBootstrap/oneOff JobBootstrap 使用 JobScheduler 调度作业
*看上去构建和初始化 quartz scheduler 交给 JobScheduleController 比较合适
Ø 依赖核心服务:
- 设置服务 置入作业配置,初始化其他核心服务
- 调度服务 作业调度为本地 quartz 作业