分布式调度引擎elastic-job3源码分析(五)-核心服务II

1. 背景

调度引擎是关键的基础设施,不但是定时执行任务,更是大规模分布式任务引擎,分布式并行处理平台,管理计算节点集群,提供高吞吐的可伸缩的数据处理能力。

公司日益增长的业务,对调度引擎高吞吐,高并发的要求也快速增长,需构建一个无中心,管理大集群,健壮分片容错的任务调度任务平台,支撑业务发展。

同时,分布式调度引擎也是datax,可观测-性能指标组件(sentinel dashboard)分布式改造的核心技术

2. 参考

芋道源码 https://blog.csdn.net/X5fnncxzq4/article/details/86770194

https://www.jianshu.com/nb/18843035

3. 术语

无中心/有中心分布式 有中心分布式设置中心节点负责集群协调和元数据保存等工作,例如xxl-job的admin/executor, dolphin-scheduler master-worker都是有中心分布式设计;真正无中心设计很少,大部分是节点平等,都可以通过选举成为主节点,也就是,任何一个节点都可以成为中心

脑裂 无中心分布式设计,当网络出现问题,节点分割成多个集群,集群间因不能通讯而不能达到状态一致,通常解决方案是集群节点数奇数,节点数少于总数的集群中一半停止工作

分片/容错 分片是调度平台很重要的特性,调度处理大规模数据,需要分片执行,分片执行带来新的问题,分片失败,平台回收分片,转移到其他节点执行

4. 详细分析

服务可分为功能服务和核心服务,其中核心服务支撑功能服务的服务,功能任务有任务注册,任务执行,失效转移等,是调度平台的”业务”

4.1 核心服务

4.1.1 选主服务(election)

每个作业选主节点,主节点是作业的主节点,执行需要主节点执行的服务,如,失效转移,分片

LeaderLatch  JobNodeStorage的”应用”选主服务,使用curator的leaderLatch完成

两个节点用于选主,/election/latch,  /failover/latch

LeaderElectionExecutionCallback 选主后的回调

选举完了,备选leader写入自身instanceId到/instance

LeaderElectionJobListener  选主触发监听器

LeaderAbdicationJobListener 自身disabled,退位

  • 谁使用:

      - 分片服务 设置分片标记

      - 失效转移 抓取分片

  • 依赖服务:

       -  znode存储服务/注册中心  znode节点存取,监听器注册

       -  监听服务

4.1.2 配置服务(config)

ConfigurationService设置/载入作业配置

 监听作业配置的cron表达式变化,修改作业调度时间

config  作业的配置以json格式存入

  • 谁使用:

       - 设置服务 写入作业配置

  • 依赖服务:

       - 调度服务 修改作业触发时间

 4.1.3 设置服务(setup)

 设置服务初始化其他核心服务

  • 谁使用:

       - 调度服务 初始化作业

       - 监听服务 开启监听器

      - 选主服务 作业初始发动选主

      - 服务实例服务 写入所在服务Ip到zk

      - 运行实例服务 写入instanceId到zk

      - 诊断服务 开启诊断服务

  • 依赖服务:

      -  配置服务 写入作业配置到zk

4.1.4 服务节点服务(server)

 注册/查询作业的服务节点和实例

server znode是持久节点写入的,值是”Enabled”或者”Disabled”

4.1.5 实例服务(instance)

注册查询作业运行实例,触发实例执行

InstanceShutdownStatusJobListener 运行实例下线, 判断是否自身,若是关闭作业

关联的监听器

ListenServersChangedJobListener 主节点感知server或instance变化,设置重分片标记

RegistryCenterConnectionStateListener实例下线后重新上线,该监听器重新注册server,instance;resume作业

PersistOneline运行实例启动写入JobInstanceId,如192.168.1.101@-@313516,313516 是jvm 名称

 4.1.6 诊断服务(reconcile)

符合以下3个条件设置分片标记, 下次作业启动触发重新分片

  1. 分片标志没有设定
  2. 有不在线的服务分配了分片
  3. 不是静态分片&&没有分片信息
  • 谁使用:

       - 设置服务 设置服务启动诊断服务

  • 依赖服务:

      - 配置服务 获取定时执行时间间隔

      - 分片服务 设置重新分配标记

4.1.7 触发服务(trigger)

触发服务支持手动(控制台/api)触发作业执行

InstanceService 读取”instances”节点,获取在线的instanceId集合,写入”triggers”

JobTriggerStatusJobListener  监听trigger节点变更,检查变更是否自身instanceId,触发作业

*设计上有违面向对象原则,Instance服务打破trigger服务封装

*触发所有在线实例,只需在线实例监控”triggers”节点便可,无需写入每个实例节点

  • 谁使用:

      - 控制台/api

  • 依赖服务:

       - 运行实例服务 获取在线运行实例

       - 调度服务 触发作业执行

快照服务(snapshot)

快照服务放在核心服务,但可以看作功能服务,独立启动和运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

中间件XL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值