分布式调度引擎 elastic-job3 源码分析 (一) 概述

分布式调度引擎 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.   整体架构

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,增加作业状态,数据处理量等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

中间件XL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值