Elastic-Job实现原理
来源:互联网 发布:上海办公软件培训 编辑:程序博客网 时间:2024/05/22 03:40
原文地址:http://dangdangdotcom.github.io/elastic-job/post/1.x/theory/
实现原理
弹性分布式实现
第一台服务器上线触发主服务器选举。主服务器一旦下线,则重新触发选举,选举过程中阻塞,只有主服务器选举完成,才会执行其他任务。
某作业服务器上线时会自动将服务器信息注册到注册中心,下线时会自动更新服务器状态。
主节点选举,服务器上下线,分片总数变更均更新重新分片标记。
定时任务触发时,如需重新分片,则通过主服务器分片,分片过程中阻塞,分片结束后才可执行任务。如分片过程中主服务器下线,则先选举主服务器,再分片。
通过上一项说明可知,为了维持作业运行时的稳定性,运行过程中只会标记分片状态,不会重新分片。分片仅可能发生在下次任务触发前。
每次分片都会按服务器
IP
排序,保证分片结果不会产生较大波动。实现失效转移功能,在某台服务器执行完毕后主动抓取未分配的分片,并且在某台服务器下线后主动寻找可用的服务器执行任务。
注册中心数据结构
注册中心在定义的命名空间下,创建作业名称节点,用于区分不同作业,所以作业一旦创建则不能修改作业名称,如果修改名称将视为新的作业。作业名称节点下又包含4个数据子节点,分别是config
, servers
, execution
和leader
。
概览
config节点
作业全局配置信息
cron
表达式shardingItemParameters否分片序列号和个性化参数对照表jobParameter否作业自定义参数monitorExecution否监控作业执行时状态processCountIntervalSeconds否统计作业处理数据数量的间隔时间concurrentDataProcessThreadCount否同时处理数据的并发线程数fetchDataCount否每次抓取的数据量streaming-process否是否流式处理数据如果流式处理数据, 则
fetchData
不返回空结果将持续执行作业如果非流式处理数据, 则处理数据完成后作业结束maxTimeDiffSeconds否允许的本机与注册中心的时间误差秒数failover否是否开启失效转移misfire否是否开启错过任务重新执行description否作业描述信息scriptCommandLine否脚本型作业作业执行命令行
servers节点
作业服务器信息,子节点是作业服务器的IP
地址。IP
地址节点的子节点存储详细信息。同一台作业服务器只能运行一个相同的作业实例,因为作业运行时是按照IP
注册和管理的。
是
作业服务器状态,分为READY和RUNNING用于表示服务器在等待执行作业还是正在执行作业
如果status节点不存在则表示作业服务器未上线disabled否作业服务器状态是否禁用
可用于部署作业时,先禁止启动,部署结束后统一启动sharding否该作业服务器分到的作业分片项
多个分片项用逗号分隔
如:
0, 1, 2
代表该服务器执行第1, 2, 3
片分片processSuccessCount否统计一段时间内处理数据成功的数量统计间隔可通过
config\processCountIntervalSeconds
配置processFailureCount否统计一段时间内处理数据失败的数量统计间隔可通过
config\processCountIntervalSeconds
配置paused否暂停作业的标记,暂停的作业不会终止调度器运行。作业程序再次启动时不会清理此标记shutdown否关闭作业的标记,关闭的作业将停止调度,并可通过控制台删除。只有作业程序再次启动时才会清理此标记trigger否立刻触发作业的标记,作业在不与上次运行中作业冲突的情况下将立刻启动,并在启动后自动清理此标记execution节点
执行时信息,子节点是分片项序号,从零开始,至分片总数减一。分片项序号的子节点存储详细信息。可通过配置config\monitorExecution
为false
关闭记录作业执行时信息。
是
分片项正在运行的状态如果没有此节点,并且没有
completed
节点,表示该分片未运行completed否分片项运行完成的状态下次作业开始执行时会清理failover
是
如果该分片项被失效转移分配给其他作业服务器,则此节点值记录执行此分片的作业服务器IP
lastBeginTime否该分片项最近一次的开始执行时间nextFireTime否该分片项下次作业触发时间lastCompleteTime否该分片项最近一次的结束执行时间misfire否是否开启错过任务重新执行leader节点
作业服务器主节点信息,分为election
,sharding
和execution
三个子节点。分别用于主节点选举,分片和作业执行时处理。
leader节点是内部使用的节点,如果对作业框架原理不感兴趣,可不关注此节点。
是
主节点服务器IP
地址一旦该节点被删除将会触发重新选举
重新选举的过程中一切主节点相关的操作都将阻塞election\latch否主节点选举的分布式锁
为
curator
的分布式锁使用sharding\necessary否是否需要重新分片的标记如果分片总数变化,或作业服务器节点上下线或启用/禁用,以及主节点选举,会触发设置重分片标记
作业在下次执行时使用主节点重新分片,且中间不会被打断
作业执行时不会触发分片sharding\processing
是
主节点在分片时持有的节点如果有此节点,所有的作业执行都将阻塞,直至分片结束
主节点分片结束或主节点崩溃会删除此临时节点execution\necessary否是否需要修正作业执行时分片项信息的标记
如果分片总数变化,会触发设置修正分片项信息标记
作业在下次执行时会增加或减少分片项数量execution\cleaning
是
主节点在清理上次作业运行时状态时所持有的节点每次开始新作业都需要清理上次运行完成的作业信息
如果有此节点,所有的作业执行都将阻塞,直至清理结束
主节点分片结束或主节点崩溃会删除此临时节点failover\items\分片项否一旦有作业崩溃,则会向此节点记录
当有空闲作业服务器时,会从此节点抓取需失效转移的作业项failover\items\latch否分配失效转移分片项时占用的分布式锁
为
curator
的分布式锁使用流程图
作业启动
作业执行
===========================================================================================================
- Elastic-Job实现原理
- Elastic-Job-Lite实现原理
- elastic job原理解析
- Elastic Job 定时任务实现
- elastic-job的原理简介和使用
- Elastic-JOB
- Elastic-Job
- Elastic job
- Elastic-Job-Lite的原理简介和使用(推荐)
- elastic job (一) elastic-job-lite----SimpleJob
- Elastic-Job之简单Job
- elastic-job 构建
- Elastic-Job中常见问题
- Elastic-Job快速使用
- Elastic-Job的主要功能
- Elastic-Job使用限制
- Elastic-Job开发指南
- Elastic-Job开发指南
- idea201602激活
- 使用vector list等容器对字符串的排序
- 快速排序
- 目标端为rac 并行+network_link导入测试
- 在一个千万级的数据库查寻中,如何提高查询效率?
- Elastic-Job实现原理
- EL表达式
- 一元三次方程求解
- 6.rabbitmq之整合spring
- Qt-JSON的使用
- 检验输入框是输入是否是链接
- Android动画——属性动画
- 内存对齐
- BZOJ3510 首都