elasticJob分布式调度
elastic_job
1、elasticJob介绍
elasticJob是一个分布式调度解决方案,由两个相互独立子项目组成
- ElasticJob-Lite :定位为轻量级无中心化解决方案
- ElasticJob-Cloud :使用 Mesos 的解决方案,额外提供资源治理、应用分发以及进程隔离等服务。
elasticJob相比较一般的定时任务框架,比如Qurtz框架等来说有如下的特点:
特点 | 简介 |
---|---|
弹性调度 | 支持分布式场景下分片和高可用,同时保持了水平扩展,提高执行效率和吞吐量 |
资源分配 | 动态的定制时间触发器,和动态的定制资源到对应的任务中 |
作业治理 | 提供了失效转移和错过作业重试机制,自诊断修复 |
作业依赖 | 基于有向无环图的作业间或者分片间的依赖 |
作业开放 | 统一接口,并且支持多种形式,比如http,脚本、文件、大数据等,同时能够嵌入spring家族中 |
可视化管控端 | 作业追溯管理、注册中心管理 |
2、实现原理
ElasticJob-Lite 并无作业调度中心节点,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。 注册中心仅用于作业注册和监控信息存储。而主作业节点仅用于处理分片和清理等功能
- 第一台服务器上线触发主服务器选举。主服务器一旦下线,则重新触发选举,选举过程中阻塞,只有主服务器选举完成,才会执行其他任务。
- 某作业服务器上线时会自动将服务器信息注册到注册中心,下线时会自动更新服务器状态。
主节点选举,服务器上下线,分片总数变更均更新重新分片标记。 - 定时任务触发时,如需重新分片,则通过主服务器分片,分片过程中阻塞,分片结束后才可执行任务。如分片过程中主服务器下线,则先选举主服务器,再分片。
- 通过上一项说明可知,为了维持作业运行时的稳定性,运行过程中只会标记分片状态,不会重新分片。分片仅可能发生在下次任务触发前。
- 每次分片都会按服务器IP排序,保证分片结果不会产生较大波动。
- 实现失效转移功能,在某台服务器执行完毕后主动抓取未分配的分片,并且在某台服务器下线后主动寻找可用的服务器执行任务。
注册中心zookeeper的目录解析
目录 | 说明 |
---|---|
config | 作业配置信息,以 YAML 格式存储 |
instances | 作业运行实例信息,由作业运行服务器的 IP 地址和 PID 构成。 作业运行实例主键均为临时节点,当作业实例上线时注册,下线时自动清理。 |
sharding | 作业分片信息,子节点是分片项序号,从零开始,至分片总数减一。 |
servers | 作业服务器信息\IP 地址 |
leader | 作业服务器主节点信息,分为 election,sharding 和 failover 三个子节点。 分别用于主节点选举,分片和失效转移处理。 |
3、启动流程
4、作业执行
elasticJob的官方网址:https://shardingsphere.apache.org/elasticjob/index.html
apache.org/elasticjob/index.html