分布式调度引擎 elastic-job3 源码分析 (二) 作业模型和注册

本文分析了分布式调度引擎 elastic-job3 的作业模型和注册过程,包括作业的分类(一次/定时)、初始化、注册与调度。文中提到的核心组件有 JobScheduler、JobRegistry 和 JobScheduleController,这些组件共同确保了分布式任务的正确执行和调度。此外,还讨论了无中心分布式、脑裂和分片容错等关键概念。
摘要由CSDN通过智能技术生成

分布式调度引擎 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 作业

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中间件XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值