共计 4587 个字符,预计需要花费 12 分钟才能阅读完成。
在成为 Apache ShardingSphere 的子项目的几个月工夫里,ElasticJob 社区在修复与合并了 535 个 issue 和 pull request 之后,公布了退出 Apache 软件基金会后的第一个正式版本:3.0.0-alpha。
背景
ElasticJob(https://github.com/apache/sha…)是面向互联网生态和海量工作的散布式调度解决方案,由两个互相独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。它诞生于 2015 年,过后业界尽管有 QuartZ 等超群绝伦的定时工作框架,但不足分布式方面的摸索。散布式调度云平台产品的缺失,使得 ElasticJob 从呈现伊始便备受关注。它无效地补救了作业在分布式畛域的短板,并且提供了一站式的自动化运维管控端,各个产品应用对立的作业 API,开发者仅需一次开发,即可随便部署。
ElasticJob 在技术选型时,抉择站在了伟人的肩膀上而不是反复制作轮子的理念,将定时工作事实标准的 QuartZ 与 分布式协调的利器 ZooKeeper 完满联合,疾速而稳固的搭建了全新概念的散布式调度框架。
ElasticJob 调度模型
ElasticJob 的调度模型划分为反对线程级别调度的过程内调度 ElasticJob-Lite,和过程级别调度的 ElasticJob-Cloud。
过程内调度
ElasticJob-Lite 是面向过程内的线程级调度框架。它可能与 Spring、Dubbo 等 Java 框架配合应用,在作业中可自在应用 Spring 注入的 Bean,如数据源连接池、Dubbo 近程服务等,更加不便地贴合业务开发。
ElasticJob-Lite 与业务利用部署在一起,其生命周期与业务利用保持一致,是典型的嵌入式轻量级架构。ElasticJob-Lite 非常适合于资源应用稳固、部署架构简略的一般 Java 利用,能够了解为 Java 开发框架。
ElasticJob-Lite 自身是无中心化架构,无需独立的中心化调度节点,分布式下的每个工作节点均是以自调度的形式适时的调度作业。工作之间只须要一个注册核心来对分布式场景下的工作状态进行协调即可,目前反对 ZooKeeper 作为注册核心。
架构图如下:
通过图中可看出,ElasticJob-Lite 的分布式作业节点通过选举获取主节点,并通过主节点进行分片。分片结束后,主节点与从节点并无二致,均以自我调度的形式执行工作。
过程级调度
ElasticJob-Cloud 领有过程内调度和过程级别调度两种形式。因为 ElasticJob-Cloud 可能对作业服务器的资源进行管制,因而其作业类型可划分为常驻工作和刹时工作。常驻工作相似于 ElasticJob-Lite,是过程内调度;刹时工作则齐全不同,它充沛的利用了资源分配的削峰填谷能力,是过程级的调度,每次工作的会启动全新的过程解决。
ElasticJob-Cloud 须要通过 Mesos 对资源进行管制,并且通过部署在 Mesos Master 的调度器进行工作和资源的调配。Cloud 采纳中心化架构,将调度核心的高可用交由 Mesos 治理。
它的架构图如下:
通过图中可看出,ElasticJob-Cloud 除了领有 Lite 的全副能力之外,还领有资源分配和工作散发的能力。它将作业的开发、打包、散发、调度、治理、分片等一些列的生命周期齐全托管,是真正的作业云调度零碎。
相比于 ElasticJob-Lite 的简略易用,ElasticJob-Cloud 对 Mesos 的强依赖减少了零碎部署的复杂度,因而更加适宜大规模的作业系统。
性能列表
ElasticJob 性能次要有弹性调度、资源分配、作业治理和可视化管控。
弹性调度
弹性调度是 ElasticJob 最重要的性能,也是这款产品名称的由来。它是一款可能让工作通过分片进行程度扩大的工作解决零碎。
ElasticJob 中工作分片项的概念,使得工作能够在分布式的环境下运行,每台工作服务器只运行调配给该服务器的分片。随着服务器的减少或宕机,ElasticJob 会近乎实时的感知服务器数量的变更,从而从新为分布式的工作服务器调配更加正当的工作分片项,使得工作能够随着资源的减少而晋升效率。
资源分配
调度是指在适宜的工夫将适宜的资源分配给工作,并使其失效。ElasticJob 具备资源分配的能力,它可能像分布式的操作系统一样调度工作。资源分配是借由 Mesos 实现的,由 Mesos 负责分配任务申明的所需资源(CPU 和内存),并将调配进来的资源进行隔离。ElasticJob 在获取到资源之后才会执行工作。
思考到 Mesos 零碎部署绝对简单,因而 ElasticJob 将这部分拆分至 ElasticJob cloud 局部,供高级用户应用。随着 Kubernetes 的强劲倒退,ElasticJob 将来也会实现 Cloud 局部与它的对接。
作业治理
作业在分布式场景下的高可用、生效转移、错过作业从新执行等行为的治理和协调。
可视化管控端
次要包含作业申明周期管控、执行历史记录查问、配置核心治理等。
3.0.0-alpha 性能先睹为快
构建 & 依赖
1. 降级至 Java 8
2. 降级最低反对的 ZooKeeper 版本 至 3.6.x
API 变更
1. 将 Maven 坐标的 groupId 变更为 org.apache.shardingsphere.elasticjob
2. 将包名称变更为 org.apache.shardingsphere.elasticjob
3. 将 Spring 命名空间名称变更为 http://shardingsphere.apache….
4. 全新的作业 API,可应用 SPI 自定制作业类型
5. 应用 SPI 援用配置策略,如工作分片、线程池应用和错误处理等策略
6. 将控制台代码从作业外围模块中拆散
新性能
1. 调度器多元化,减少一次性任务调度器
2. 提供 ElasticJob-Lite 我的项目的 官网 Spring Boot Starter
3. 反对应用多种数据库类型存储作业历史轨迹数据
4. 容许用户通过环境变量指定适宜的 IP 地址
5. 全新的控制台界面
3.x 版本设计解读
通过 Release Notes 可能看出,ElasticJob 3.x 并非 2.x 的修补版本,而是通过变革的设计理念践行的一套新产品。
ElasticJob 3.x 最直观的变动是将原有的个位数的模块数量拆分为数十个职责清理的微模块。
新版本的关键词是微内核、可扩大和生态对接。
微内核
ElasticJob 3.x 形象了 API 和基础设施模块,并且将注册核心、历史执行轨迹、控制台、作业执行器、Lite 和 Cloud 等模块全数拆散。
内核模块高度可扩大,但不依赖于可扩大模块自身的实现。它继承了 ElasticJob 之前的能力,在持续为开发者提供分布式服务的工具包的同时,向开发者凋谢可自在定制化扩大的脚手架。
可扩大
ElasticJob 3.x 在微内核的根底上定义了丰盛的可扩大接口,包含作业类型、配置策略、历史执行轨迹存储端以及将要做的注册核心存储端等可扩大接口。
开发者能够在不批改 ElasticJob 源码的状况下织入定制化性能,真正做到对批改敞开,对扩大凋谢。
### 生态对接
ElasticJob 3.x 提供了官网的 Spring Boot Starter,并曾经着手开发基于 Apache SkyWalking 的主动探针,使其能更加便捷的融入现有的技术体系。
另外,从 Release Notes 中能够解读到的是,ElasticJob 3.x 并未对 Cloud 进行大幅更新,其次要改变均集中在内核以及 Lite 模块。
对于部署简单且逐步不再风行的 Mesos,ElasticJob 的 3.x 将慢慢弱化对它的依赖,并打算在将来提供更加泛化资源隔离 API,使 Cloud 产品线可对接 Mesos,Kubernetes 甚至无依赖的独立部署应用。
3.0.0-beta 性能预报
在调整完我的项目和包构造之后,ElasticJob 3.0.0-beta 版本将工作重点放在新性能开发和操作 API 标准化这两个方面。
新性能预报
- 作业依赖
反对基于有向无环图(DAG)的作业依赖。依赖蕴含基于作业整体维度的依赖,以及基于作业分片项的依赖,打造更加灵便的作业治理解决方案。
- HTTP 作业类型
反对 HTTP 作业类型,在 Script 之外提供另外的跨语言作业类型。
操作 API 标准化
- 对立提供基于 RESTful 操作 API 接口
- 简化基于 SDK 操作 API 接口
将来布局
将来,ElasticJob 将大刀阔斧的向前迈进,次要的布局如下:
- 调度执行拆散
将调度器和执行器齐全拆散。调度器能够与执行器一起部署,即为 ElasticJob lite 的无中心化轻量级版本;调度器能够与执行器拆散部署,即为 ElasticJob cloud 的资源管控的一站式散布式调度零碎。
- 更加易用的云管产品
将目前仅反对 Mesos 的 ElasticJob cloud 打造为反对 Mesos 和 Kubernetes 的作业云管平台,并提供无 Mesos 和 Kubernetes 也可能独立应用的不蕴含资源管控的纯作业管控平台。
- 可插拔生态
与 Apache ShardingSphere 一脉相承,ElasticJob 也将提供更加可插拔和模块化架构,为开发者提供基础设施。不便开发者基于 ElasticJob 二次开发,增加各种定制化性能,包含但不限于作业类型(如:大数据作业、HTTP 作业等)、注册核心类型(如:Eureka 等)、执行轨迹存储介质(如其余数据库类型)等。
ElasticJob 最终会将 Lite 和 Cloud 以更贴近的形式供开发工程师和运维工程师应用,共享其调度、执行和作业库。整体规划如下:
对于 ElasticJob 社区
ElasticJob 社区在之前的几年处于停滞情况,次要起因是作者精力有限,分身乏术。在接管到了作为 Apache ShardingSphere 弹性迁徙的调度基础设施的需要之后,本就一脉相承的 ElasticJob 社区决定重启,并且作为 Apache ShardingSphere 的子项目持续发光发热。目前的 ElasticJob 已正式将我的项目源码迁入 Apache 的 GitHub 仓库,并且在重启的几个月来非常沉闷,在 GitHub 周和月度趋势排名中榜上有名。
ElasticJob 是 Apache ShardingSphere(https://github.com/apache/sha…)的子项目,指标是成为独立的 Apache 顶级我的项目,以及为 Apache ShardingSphere 的弹性迁徙提供数据调度的基石。
作者简介
张亮,京东数科数字技术核心架构专家,Apache ShardingSphere PMC Chair。
酷爱开源,善于以 Java 为主分布式架构,推崇优雅代码。
目前次要精力投入在将分布式数据库中间件 Apache ShardingSphere 打造为业界一流的金融级数据解决方案之上。
Apache ShardingSphere(https://github.com/apache/sha… Apache 软件基金会顶级我的项目,也是 Apache 软件基金会首个分布式数据库中间件。
曾出版书籍《将来架构——从服务化到云原生》。
GitHub: https://github.com/terrymanu,随时欢迎技术交换和斧正。