GitHub上持续冲榜ElasticJob重启

15次阅读

共计 5346 个字符,预计需要花费 14 分钟才能阅读完成。

你会误认为 ElasticJob 只是作业管控平台么?创始人为你解读产品定位与新版本设计理念

——写于 ElasticJob 3.x 版本公布前夕

作者

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

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

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

调度(Scheduling)在计算机领域是个十分宏大的概念,CPU 调度、内存调度、过程调度等都能够称之为调度。它是指在特定的机会调配正当的资源去解决预先确定的工作,用于在适当的机会触发一个蕴含业务逻辑的利用。

调度无论在单机还是分布式环境中都是很重要的课题。在单机环境,调度与底层操作系统脱离不了干系;而在分布式环境中,调度间接决定运行集群的投入和产出。调度的两个外围因素是资源治理和触发机会。

ElasticJob 是一个散布式调度解决方案,由两个互相独立的子项目 ElasticJob Lite 和 ElasticJob Cloud 组成。ElasticJob Lite 定位为轻量级无中心化解决方案,应用 jar 的模式提供分布式工作的协调服务;ElasticJob Cloud 采纳自研 Mesos Framework 的解决方案,额定提供资源治理、利用散发以及过程隔离等性能。

本文将介绍 ElasticJob 的产品定位、3.x 设计理念、将来布局以及社区重启的背地故事。

产品定位:面向互联网生态和海量工作

ElasticJob 自 2015 年开源,堪称几经沉浮。从开源之初的备受关注,到近年的更新停滞,期间随关注的减少,每个开发者心目中都有对它的了解和定位。

然而,误会也随社区停滞产生,其中最大的误会便是认为 ElasticJob 是定时工作管控平台。诚然,工作管控是 ElasticJob 的一个产品指标,但并非全副。从设计者的角度看,工作管控仅为其中的一个指标。

ElasticJob 的定位是 面向互联网生态的海量工作的散布式调度解决方案。短短一句话稀释了 ElasticJob 的大量信息,且容笔者娓娓道来。

  • 面向互联网生态

ElasticJob 是面向业务利用的开发框架,它面向的不仅是简略的零碎作业或数据处理作业,而是可能联合业务利用的简单工作。

  • 海量工作

ElasticJob 可能同时调度 10w 级别的并发工作,日调度次数可达数千万乃至上亿。

  • 散布式调度

ElasticJob 是为分布式而生的产品,能够与云原生、弹性调度、横向扩大等相结合,用户可通过简略的服务器数量增减来晋升或升高零碎整体的吞吐量。

  • 解决方案

ElasticJob 并非仅是 Java 开发框架,也并非简略的调度管控平台,其内容涵盖了 Java 开发框架、调度管控平台、资源管控等很多维度组合,是一整套解决方案。

通过上文解释,置信读者已对 ElasticJob 有些许不同认知,上面再从性能角度具体论述一下它的产品定位。

  • 弹性调度

这是 ElasticJob 最重要的性能,也是这款产品名称的由来。ElasticJob 是一款可能让工作通过分片进行程度扩大的工作解决零碎。

ElasticJob 中的工作分片项的概念,使得工作能够在分布式的环境下运行,每台工作服务器只运行调配给本人的分片。随着服务器的减少或宕机,ElasticJob 会近乎实时的感知服务器数量的变更,从而从新为分布式的工作服务器调配更加正当的工作分片项,使得工作能够随着资源的减少而晋升效率。

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

  • 资源分配

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

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

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

  • 作业治理

作业治理次要蕴含 3 方面:可视化治理端、分布式治理和作业依赖。

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

分布式治理包含作业的高可用、生效转移、错过作业从新执行等能力。

作业依赖指基于有向无环图(DAG)对作业的调度关系进行梳理。目前的 ElasticJob 还不具备此方面的性能,将于 3.1.0 版本开启开发。

  • 作业生态

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

ElasticJob 的作业还可能透明化地与业务利用整合,不便与 Spring 框架配合应用。在作业中可自在应用 Spring 注入的 Bean,如数据源连接池、Dubbo 近程服务等,更不便贴合业务开发。

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

最大翻新是弹性调度,将来将齐全拆散调度和执行

相比于业界的其余调度我的项目,ElasticJob 最大的劣势是多样化和灵便的可扩大体系,最大的翻新是弹性调度。

多样化是指 ElasticJob 同时反对过程内调度和过程级别的调度,ElasticJob Lite 是去中心化调度,ElasticJob Cloud 是集资源管控为一体的中心化调度,能够适宜不同用户的不同场景。

灵便的可扩大体系次要体现在作业类型的定制化扩大。用户能够通过 ElasticJob 提供的 SPI 接口扩大本人的作业类型,而无需批改 ElasticJob 的源码。ElasticJob 可将这些高度形象的作业类型吸纳入社区,造成丰盛的作业库。

弹性调度的翻新,是 ElasticJob 最大的亮点。在 2015 年刚开源时,基于分片的弹性调度少之又少,现有调度我的项目的分片和弹性调度,都或多或少参考了 ElasticJob 的设计与实现。

将来,ElasticJob 将大刀阔斧的向前迈进,次要的布局如下

  • 作业依赖

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

  • 调度执行拆散

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

  • 更加易用的云管产品

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

  • 可插拔生态

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

ElasticJob 最终会将 Lite 和 Cloud 以更贴近的形式供开发工程师和运维工程师应用,共享其调度、执行和作业库。整体规划如下:

近期公布 3.0.0,作为回馈社区的疾速版本

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

  • 作业生态圈初现

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

  • 多元化调度器

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

  • 微内核 & 生态拆散

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

3.0.0 的版本作为一个疾速给社区回馈的版本,并未进行颠覆性的变革,而是尝试将我的项目内核一点一滴的解耦。

重启经营,复刻 ShardingSphere 教训到 ElasticJob

作为 ElasticJob 的作者,我为 ElasticJob 社区停滞的这段时间致歉。

在 ElasticJob 社区停滞的这段时间内,Apache ShardingSphere 的开发及 Apache 社区的孵化,占据了我的大部分工夫精力。在靠近 3 年的工夫里,ShardingSphere 从 Sharding-JDBC 改名,其模块由个位数一直减少,至今已靠近破百,微小的工作量显而易见。

与此同时,我也取得了经营 Apache 一线社区的教训。因而在往年 4 月,Apache ShardingSphere 正式于 Apache 基金会毕业成为顶级我的项目时,我便萌发了将 Apache 社区的经营教训复刻至 ElasticJob 社区的想法。Apache 社区经营相干状况可查看文章:《80% 的代码曾由一人提交,Apache ShardingSphere 何以从 ASF 毕业并降职 TLP》

同时,Apache ShardingSphere 的弹性迁徙模块须要一个弱小及稳固的散布式调度框架,ElasticJob 是目前惟一的可能过程内调度以及轻量级 SDK 的形式融入 Apache ShardingSphere 的解决方案。因而,我决定将 ElasticJob 捐献入 Apache 软件基金会,成为 Apache ShardingSphere 的子项目。这使得 ElasticJob 防止了 Apache 孵化器的流程,能够间接以 Apache 社区的运作形式后退。

此外,Apache ShardingSphere 所应用的弹性迁徙,将是 ElasticJob 至今为止面对的最简单场景之一,它在分布式、自动化、弹性伸缩、面向的数据量、作业状态管控等方面均是前所未有的挑战。置信 Apache ShardingSphere 对 ElasticJob 的利用将推动 ElasticJob 的进一步降级变革。

Apache ShardingSphere 弹性迁徙的利用场景之外,ElasticJob 在靠近 5 年的开源工夫中,也积攒了大量利用案例,点此查看。目前官网收录了 70 家采纳公司的名称,而理论采纳公司远远多于这个数量。欢送曾经应用 ElasticJob 的公司在 GitHub 上分割咱们,咱们会将您的公司注销在官网的采纳列表。

目前 ElasticJob 应用场景涵盖业务作业、监控作业、零碎作业、大数据作业等各个维度,并且衍生出了诸如 Saturn 这样的优良 fork 作品。

接下来,ElasticJob 社区的指标是成为和 Apache ShardingSphere 一样的 Apache 软件基金会的顶级我的项目,达成更宽泛的利用。

我的项目重启的这段时间,ElasticJob 继续在 GitHub 的周和月度排行榜上有名。

最近一个月,ElasticJob 社区合并了 152 个 Pull Requests,敞开了 105 个 Issues;25 个提交者总共 158 次提交,实现了 4w+ 行代码的改变。

基石曾经搭建实现,欢送开源爱好者退出 ElasticJob 社区的建设。GitHub 地址:https://github.com/apache/shardingsphere-elasticjob-lite

正文完
 0