elasticJob分布式调度

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