Elastic-Job-Lite实现原理

本文介绍了一种基于IP排序的弹性分布式作业调度方案,包括主服务器选举、作业服务器上下线处理、分片策略及失效转移机制。同时详细描述了注册中心的数据结构设计,以及如何维护作业执行过程中的稳定性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:http://www.cnblogs.com/hgod/articles/5922337.html

弹性分布式实现

  • 第一台服务器上线触发主服务器选举。主服务器一旦下线,则重新触发选举,选举过程中阻塞,只有主服务器选举完成,才会执行其他任务。

  • 某作业服务器上线时会自动将服务器信息注册到注册中心,下线时会自动更新服务器状态。

  • 主节点选举,服务器上下线,分片总数变更均更新重新分片标记。

  • 定时任务触发时,如需重新分片,则通过主服务器分片,分片过程中阻塞,分片结束后才可执行任务。如分片过程中主服务器下线,则先选举主服务器,再分片。

  • 通过上一项说明可知,为了维持作业运行时的稳定性,运行过程中只会标记分片状态,不会重新分片。分片仅可能发生在下次任务触发前。

  • 每次分片都会按服务器IP排序,保证分片结果不会产生较大波动。

  • 实现失效转移功能,在某台服务器执行完毕后主动抓取未分配的分片,并且在某台服务器下线后主动寻找可用的服务器执行任务。

注册中心数据结构

注册中心在定义的命名空间下,创建作业名称节点,用于区分不同作业,所以作业一旦创建则不能修改作业名称,如果修改名称将视为新的作业。作业名称节点下又包含4个数据子节点,分别是configserversexecutionleader

概览

config节点

作业配置信息,以JSON格式存储

JSON属性名 描述
jobName 作业名称,为Elastic-Job唯一标识
jobClass 作业实现类名称
jobType 作业类型,目前支持SIMPLEDATAFLOWSCRIPT三种类型
cron 作业启动时间的cron表达式
shardingTotalCount 作业分片总数,修改会导致运行中作业重新分片
shardingItemParameters 分片序列号和个性化参数对照表
jobParameter 作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业
例:每次获取的数据量、作业实例从数据库读取的主键等
failover 是否开启失效转移,仅monitorExecution开启时才起作用
misfire 是否开启错过任务重新执行
description 作业描述信息
disabled 作业服务器状态是否禁用
可用于部署作业时,先禁止启动,部署结束后统一启动
monitorExecution 监控作业执行时状态
maxTimeDiffSeconds 允许的本机与注册中心的时间误差秒数
monitorPort 使用dump命令的端口,为-1则表示不开启端口
streamingProcess 是否流式处理数据
如果流式处理数据,则fetchData不返回空结果将持续执行作业
如果非流式处理数据, 则处理数据完成后作业结束
jobShardingStrategyClass 作业分片策略类的全路径
scriptCommandLine SCRIPT型作业作业执行命令行
jobEventConfigs 作业执行事件追踪,可配置log,rdb两种方式,rdb方式需配置driverClassName,url,username,password,logLevel
jobProperties 作业定制化属性,目前支持job_exception_handlerexecutor_service_handler,用于扩展异常处理和自定义作业处理线程池

servers节点

作业服务器信息,子节点是作业服务器的IP地址。IP地址节点的子节点存储详细信息。同一台作业服务器只能运行一个相同的作业实例,因为作业运行时是按照IP注册和管理的。

子节点名 临时节点 描述
hostName 作业服务器名称
status 作业服务器状态,分为READY和RUNNING
用于表示服务器在等待执行作业还是正在执行作业
如果status节点不存在则表示作业服务器未上线
disabled 作业服务器状态是否禁用
可用于部署作业时,先禁止启动,部署结束后统一启动
sharding 该作业服务器分到的作业分片项
多个分片项用逗号分隔
如:0, 1, 2代表该服务器执行第1, 2, 3片分片
paused 暂停作业的标记,暂停的作业不会终止调度器运行。作业程序再次启动时不会清理此标记
shutdown 关闭作业的标记,关闭的作业将停止调度,并可通过控制台删除。只有作业程序再次启动时才会清理此标记
trigger 立刻触发作业的标记,作业在不与上次运行中作业冲突的情况下将立刻启动,并在启动后自动清理此标记

execution节点

执行时信息,子节点是分片项序号,从零开始,至分片总数减一。分片项序号的子节点存储详细信息。可通过配置config\monitorExecutionfalse关闭记录作业执行时信息。

子节点名 临时节点 描述
running 分片项正在运行的状态
如果没有此节点,并且没有completed节点,表示该分片未运行
completed 分片项运行完成的状态
下次作业开始执行时会清理
failover 如果该分片项被失效转移分配给其他作业服务器,则此节点值记录执行此分片的作业服务器IP
lastBeginTime 该分片项最近一次的开始执行时间
nextFireTime 该分片项下次作业触发时间
lastCompleteTime 该分片项最近一次的结束执行时间
misfire 是否开启错过任务重新执行

leader节点

作业服务器主节点信息,分为electionshardingexecution三个子节点。分别用于主节点选举,分片和作业执行时处理。

leader节点是内部使用的节点,如果对作业框架原理不感兴趣,可不关注此节点。

子节点名 临时节点 描述
election\host 主节点服务器IP地址
一旦该节点被删除将会触发重新选举
重新选举的过程中一切主节点相关的操作都将阻塞
election\latch 主节点选举的分布式锁
curator的分布式锁使用
sharding\necessary 是否需要重新分片的标记
如果分片总数变化,或作业服务器节点上下线或启用/禁用,以及主节点选举,会触发设置重分片标记
作业在下次执行时使用主节点重新分片,且中间不会被打断
作业执行时不会触发分片
sharding\processing 主节点在分片时持有的节点
如果有此节点,所有的作业执行都将阻塞,直至分片结束
主节点分片结束或主节点崩溃会删除此临时节点
execution\necessary 是否需要修正作业执行时分片项信息的标记
如果分片总数变化,会触发设置修正分片项信息标记
作业在下次执行时会增加或减少分片项数量
execution\cleaning 主节点在清理上次作业运行时状态时所持有的节点
每次开始新作业都需要清理上次运行完成的作业信息
如果有此节点,所有的作业执行都将阻塞,直至清理结束
主节点分片结束或主节点崩溃会删除此临时节点
failover\items\分片项 一旦有作业崩溃,则会向此节点记录
当有空闲作业服务器时,会从此节点抓取需失效转移的作业项
failover\items\latch 分配失效转移分片项时占用的分布式锁
curator的分布式锁使用

流程图

作业启动

作业执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值