分布式时间槽elastic timeslot架构设计

本文介绍了分布式时间槽的架构设计,作为大规模分布式任务引擎的关键组成部分,它利用时间轮算法管理作业,支持分布式特性。文章详细阐述了设计原理、技术架构、Znode设计、作业注册与调度、执行器设计以及与分布式支撑平台的集成。同时,提到了超时检测和下线实例的作业处理策略,旨在提供高吞吐和可伸缩的数据处理能力。
摘要由CSDN通过智能技术生成

背景

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

同时,分布式调度引擎也是 dataxsentinel dashboard分布式改造的核心技术

根据场景,调度引擎分为分布式定时任务,处理大规模数据任务;分布式时间槽,处理大量任务

本文介绍分布式时间槽的架构设计,分布式特性依赖《分布式服务支撑平台》

时间轮/时间槽 时间轮是由时间槽组成的环形队列,时间槽内存放作业链表,秒针如时钟秒针一样,一个时间间隔走过一个时间槽,执行时间槽内任务

时间轮算法优势,以较少资源代价管理大量任务,缺点触发时间不支持cron,分布式化困难,因此本组件采用分布式作业分片的机制,实现分布式时间槽

术语

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

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

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

参考

分布式支撑平台 《分布式支撑服务平台设计说明书.docx》

设计原理

技术架构

作业命名空间 时间槽,定义作业类型,触发时间,可看成调度器

作业实例 分片执行主体,依赖elastic平台,实现分布式特性

分片 实际是作业,有自己的独立配置,是作业类型的实例

管理台 client提交/撤销作业,写入分片

znode设计

在分布式支撑服务平台的基础上,增加对时间槽的扩展

Znode用途参考《分布式支撑服务平台设计说明书.docx》

/sharding

/config 存放作业(分片)的业务配置

P.S. /config存放调度配置

详细设计

*这是现在分布式时间槽的状态,以后考虑与调度作业的融合

下面详细介绍每个模块

作业注册

spring boot starter机制初始化


ElasticJobLiteAutoConfiguration spring boot自动配置主入口,import 其他的自动配置

ElasticJobBootstrapConfiguration 初始化 JobBootstrap,从 ElasticJobProperties 获取 ElasticJob 实例,构建 JobBootstrap,注册到 SingletonBeanRegistry,spring bean 工厂可获取

ScheduleJobBootstrapStartupRunner CommandLineRunner 实现,从spring bean 工厂获取ScheduleJobBootstrap 实例,注册到本地quartz作业

作业调度

JobScheduler 作业调度器,作业执行环境初始化,构建和初始化 quartz scheduler

AppRegistryContext 单例,应用上下文,持有JobScheduleController

JobScheduleController quartz 调度器的封装

ScheduleJobBootstrap/OneOffJobBootstrap 使用JobScheduler 调度作业

作业设计

ElasticJob 标记类

ElasticJobExecutor 作业执行逻辑,使用 JobItemExecutor 执行作业,在5.2 作业注册和调度进一步分析

JobItemExecutor 两类作业,Typed/Classed,Typed 类型作业实现远程调用执行器, 如 http,feign,不用实现作业类,作业进程是通用的执行节点,不会依赖作业业务;Classed 实现执行器/作业
SimpleJobExecutor/SimpleJob 简单作业实现,平台提供其他常用作业实现,如,script,http,dataflow,这是一对配套实现

作业执行设计

elastic-timeslot 作业是分片执行,作业运行实例下线失效转移,支持弹性计算,新上线节点在新一轮调度分配任务

  1. 运行实例自身是quartz单机调度引擎,quartz调起执行LiteJob
  2. LiteJob(实现quartz Job)转到elastic-timeslot的作业执行器
  3. elastic-timeslot的作业执行器是主要的执行逻辑
    1. 清理分片,包括清理上轮执行的completed标记,删除cancel标记的分片,主节点执行
    2. 分片,elastic-timeslot采用eager模式分片,即,分配所有分配*
    3. 获取本实例分配到的分配,执行
    4. 检测是否有未完成的分片,若有,回到3.2;若没有,退出

*另一个分配模式,on_demand,按需分配,用于大任务

执行器设计


ListJob/JobItemExecutor/ElasticJob elastic-timeslot可以看作分布式 quartz,分片作业由 quartz Scheduler调起

 ListJob 实现了 quartz 的 job 接口作为 quartz 与 elastic-timeslot 作业的桥接,用 quartz 的参数机制注入 ElasticJobExecutor

 这样静悄悄地桥接到 elastic-timeslot 的执行器,执行elastic-timeslot的逻辑

设置服务设计

分布式时间槽设置服务包装分布式支撑平台的设置服务(初始化分布式服务),初始化自身的服务,包括回调机制,作业配置写入,作业触发服务

分布式事件回调/应用控制接口设计

应用与分布式支撑分离,这是设计的关键之一,相关两个设计:分布式的事件通知应用回调;应用的控制接口

InstanceShutdownCallback 实例关闭回调,关闭调度器

RegistryCenterConnetionDownCallback zookeeper下线回调,暂停调度器

RegistryCenterReConnetionCallback zookeeper重新上线回到,注册运行实例,重启调度器

诊断服务

分布式环境复杂,偶尔出现不一致状态,这些状态不能自动回复,需要额外检查恢复

7.6.1 作业超时检测(TBD)

分布式时间槽分片是独立作业,但作业命名空间调度是一个整体,即所有分片结束整个调度才结束,如果出现其中一个分片超时(可能是代码问题,连接数据库等),其他作业跟着超时,对于大规模作业不可接受,超时检测发现作业超时未完成,强制终止作业,并撤销,待开发者处理后重新提交

7.6.2 作业分配给下线运行实例

查找分配给已下线实例的分片,注销分配即可,需要增加主节点选举latch

作业管理台

 作业配置管理,作业管理,作业统计,服务节点与实例统计,分片操作,分片统计

集成弹性资源框架

随着弹性资源平台的完成,集成到弹性资源,提供高弹性伸缩

https://blog.csdn.net/szlhj/category_12446958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

中间件XL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值