乐趣区

ElasticJob-的产品定位与新版本设计理念

导读:调度(Scheduling)在计算机领域是个宏大概念,CPU 调度、内存调度、过程调度等都可称之为调度。它是指在特定的机会调配正当的资源去解决预先确定的工作,用于在适当的机会触发一个蕴含业务逻辑的利用。调度无论在单机还是分布式环境中都是很重要的课题。在单机环境,调度与底层操作系统脱离不了干系;而在分布式环境中,调度间接决定运行集群的投入和产出。调度的两个外围因素是资源治理和触发机会。

背景

ElasticJob 诞生于 2015 年,过后业界尽管有 QuartZ 等超群绝伦的定时工作框架,但不足分布式方面的摸索。散布式调度云平台产品的缺失,使得 ElasticJob 从呈现伊始便备受关注。它无效的补救了作业在分布式畛域的短板,并且提供了一站式的自动化运维管控端。

ElasticJob 在技术选型时,抉择站在了伟人的肩膀上而不是反复制作轮子的理念,将定时工作事实标准的 QuartZ 与 分布式协调的利器 ZooKeeper 完满联合,疾速而稳固的搭建了全新概念的散布式调度框架。

ElasticJob 是什么?

ElasticJob 是一个散布式调度解决方案,由两个互相独立的子项目 ElasticJob Lite 和 ElasticJob Cloud 组成。ElasticJob Lite 定位为轻量级无中心化解决方案,应用 jar 的模式提供分布式工作的协调服务;ElasticJob Cloud 采纳自研 Mesos Framework 的解决方案,额定提供资源治理、利用散发以及过程隔离等性能。它通过弹性调度、资源管控、以及作业治理的性能,打造一个实用于互联网场景的散布式调度解决方案,并通过凋谢的架构设计,提供多元化的作业生态。

应用 ElasticJob 可能让开发工程师不再放心工作的线性吞吐量晋升等非性能需要,使开发工程师可能更加专一于面向业务编码设计;同时,它可能解放运维工程师,使他们不用再放心工作的可用性和相干治理需要,只通过轻松的减少服务节点即可达到自动化运维的目标。

ElasticJob 调度模型

与大部分的作业平台不同,ElasticJob 的调度模型划分为反对线程级别调度的过程内调度 ElasticJob Lite,和过程级别调度的 ElasticJob Cloud。

过程内调度

ElasticJob Lite 是面向过程内的线程级调度框架。通过 ElasticJob,作业可能透明化的与业务利用零碎相结合。它可能不便的与 Spring、Dubbo 等 Java 框架配合应用,在作业中可自在应用 Spring 注入的 Bean,如数据源连接池、Dubbo 近程服务等,更加不便的贴合业务开发。

ElasticJob Lite 与业务利用部署在一起,其生命周期与业务利用保持一致,是典型的嵌入式轻量级架构。ElasticJob Lite 非常适合于资源应用稳固、部署架构简略的一般 Java 利用,能够了解为 Java 开发框架。

ElasticJob Lite 自身是无中心化架构,无需独立的中心化调度节点,分布式下的每个工作节点均是以自调度的形式适时的调度作业。工作之间只须要一个注册核心来对分布式场景下的工作状态进行协调即可,目前反对 ZooKeeper 和 ETCD 作为注册核心。

架构图如下:

通过图中可看出,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 会近乎实时的感知服务器数量的变更,从而从新为分布式的工作服务器调配更加正当的工作分片项,使得工作能够随着资源的减少而晋升效率。

举例说明,如果作业分为 4 片,用两台服务器执行,则每个服务器分到 2 片,如下图所示。

当新减少作业服务器时,ElasticJob 会通过注册核心的长期节点的变动感知到新服务器的存在,并在下次任务调度的时候从新分片,新的服务器会承载一部分作业分片,分片如下图所示。

当作业服务器在运行中宕机时,注册核心同样会通过长期节点感知,并将在下次运行时将分片转移至仍存活的服务器,以达到作业高可用的成果。本次因为服务器宕机而未执行完的作业,则能够通过生效转移的形式继续执行。作业高可用如下图所示。

资源分配

在导读中提到过,调度是指在适宜的工夫将适宜的资源分配给工作,并使其失效。ElasticJob 具备资源分配的能力,它可能像分布式的操作系统一样调度工作。资源分配是借由 Mesos 实现的,由 Mesos 负责分配任务申明的所需资源(CPU 和内存),并将调配进来的资源进行隔离。ElasticJob 在获取到资源之后才会执行工作。

思考到 Mesos 零碎部署绝对简单,因而 ElasticJob 将这部分拆分至 ElasticJob cloud 局部,供高级用户应用。随着 Kubernetes 的强劲倒退,ElasticJob 将来也会实现 cloud 局部与它的对接。

作业治理

作业在分布式场景下的高可用、生效转移、错过作业从新执行等行为的治理和协调。

可视化管控端

次要包含作业的增删改查管控端、执行历史记录查问、配置核心的治理等。

ElasticJob 典型利用场景

ElasticJob 着重解决与简单工作、资源导向工作和业务利用工作这几个方面的问题。

简单工作

数据迁徙。如果将百亿的数据从一组数据库集群迁徙至另一组数据库集群,单线程的作业可能须要几天到几周不等。通过 ElasticJob 的弹性分片能力,能够大幅缩小海量数据迁徙所须要的工夫。

资源导向工作

占用大量计算资源的报表作业。如果每天凌晨须要破费数小时计算 T+1 的业务报表,没有资源的管控,则无论报表作业是否启动,都要为其调配足够的资源。ElasticJob 将作业分为常驻作业和刹时作业,对于报表类作业,刹时作业是非常适合的。它是否在作业启动时获取资源,在作业完结后偿还资源,做到真正的削峰填谷,更加正当的利用资源。

业务利用

订单拉取作业。订单零碎大多采纳消息中间件或作业的形式实现订单拉取,用于将订单生成零碎和后端履约零碎解耦,以便于前后端流量拆散。采纳作业实现的订单零碎,能够通过 ElasticJob 实现订单相干业务逻辑,能够不便的利用外围零碎所提供的依赖注入服务,无缝的融入业务端研发。

ElasticJob 新版本设计理念

通过了一个多月的开发,ElasticJob 社区近期打算公布 3.0.0-alpha,以作为它进入 Apache 软件基金会的第一个公布版本。它的次要性能包含:

作业生态圈

灵便定制化作业是 3.x 版本的最重要设计改革。新版本基于 Apache ShardingSphere 可插拔架构的设计理念,打造了全新作业 API。意在使开发者可能更加便捷且互相隔离的形式拓展作业类型,打造 ElasticJob 作业的生态圈。

ElasticJob 提供灵便的作业 API,它将作业解耦为作业接口和执行器接口。用户能够定制化全新的作业类型,诸如脚本执行、HTTP 服务执行、大数据类作业、文件类作业等。目前 ElasticJob 内置了脚本执行作业,并且齐全凋谢了扩大接口,开发者能够通过 SPI 的形式引入新的作业类型,并且能够便捷的回馈至社区。

多元化调度器

在保留原有的基于 cron 的工夫触发调度器的根底上,减少了一次性的调度 API,为 ElasticJob 减少了工夫维度之外的全新调度维度。

微内核 & 生态拆散

形象作业内核模块,将作业执行轨迹追踪等辅助性能以及作业生态等可扩大模块从内核模块齐全抽离。作业执行轨迹追踪模块作为二级生态,批改了之前只反对 MySQL 作为存储介质的限度,齐全凋谢长久化的适配。

将来布局

3.0.0 的版本作为一个疾速给社区回馈的版本,并未进行颠覆性的变革,而是尝试将我的项目内核一点一滴的解耦。在将来的布局中,ElasticJob 将大刀阔斧的向前迈进,次要的布局如下。

作业依赖

反对基于有向无环图(DAG)的作业依赖。依赖蕴含基于作业整体维度的依赖,以及基于作业分片项的依赖,打造更加灵便的作业治理解决方案。

调度执行拆散

将调度器和执行器齐全拆散。调度器能够与执行器一起部署,即为 ElasticJob lite 的无中心化轻量级版本;调度器能够与执行器拆散部署,即为 ElasticJob cloud 的资源管控的一站式散布式调度零碎。

更加易用的云管产品

将目前仅反对 Mesos 的 ElasticJob cloud 打造为反对 Mesos 和 Kubernetes 的作业云管平台,并提供无 Mesos 和 Kubernetes 也可能独立应用的不蕴含资源管控的纯作业管控平台。

可插拔生态

与 Apache ShardingSphere 一脉相承,ElasticJob 也将提供更加可插拔和模块化架构,为开发者提供基础设施。开发者能够不便的基于 ElasticJob 二次开发,增加各种定制化性能,包含但不限于作业类型(如:大数据作业、HTTP 作业等)、注册核心类型(如:Eureka 等)、执行轨迹存储介质(如其余数据库类型)等。ElasticJob 的定位如下图所示。

对于 ElasticJob 社区

ElasticJob 社区在之前的几年处于停滞情况,次要起因是作者精力有限,分身乏术。在接管到了作为 Apache ShardingSphere 弹性迁徙的调度基础设施的需要之后,本就一脉相承的 ElasticJob 社区决定重启,并且作为 Apache ShardingSphere 的子项目持续发光发热。目前的 ElasticJob 已正式将我的项目源码迁入 Apache 的 GitHub 仓库,并且在重启的一个多月以来非常沉闷,已实现了上百个 Pull Request 的开发,在 GitHub 周和月度趋势排名中榜上有名。

ElasticJob 是 Apache ShardingSphere 的子项目,指标是成为独立的 Apache 顶级我的项目,以及为 Apache ShardingSphere 的弹性迁徙提供数据调度的基石。

欢送开源爱好者退出 ElasticJob 社区的建设。

GitHub 地址:
https://github.com/apache/shardingsphere-elasticjob-lite

官方网站:
http://shardingsphere.apache.org/elasticjob/

作者简介:

张亮,京东数科数据研发负责人,Apache ShardingSphere 创始人 & 我的项目 VP、ElasticJob 创始人。

酷爱开源,主导开源我的项目 ShardingSphere (原名 Sharding-JDBC) 和 Elastic-Job。善于以 Java 为主分布式架构,推崇优雅代码,对如何写出具备展示力的代码有较多钻研。

目前次要精力投入在将 Apache ShardingSphere 打造为业界一流的金融级数据解决方案之上。Apache ShardingSphere 是 Apache 软件基金会旗下的顶级我的项目,也是 Apache 软件基金会首个分布式数据库中间件。

退出移动版