停滞数年后,ElasticJob 携首个 Apache 版本 3.0.0-alpha 回归


停滞数年后,ElasticJob 携首个 Apache 版本 3.0.0-alpha 回归

文章插图
 
作者 | 张亮,Apache ShardingSphere PMC Chair
责编 | 夕颜
头图 | CSDN
出品 | CSDN(ID:CSDNnews)
在成为 Apache ShardingSphere 的子项目的几个月时间里,ElasticJob 社区在修复与合并了535个 issue 和 pull request 之后,发布了加入 Apache 软件基金会后的第一个正式版本:3.0.0-alpha 。
 
背景ElasticJob(https://github.com/apache/shardingsphere-elasticjob)是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 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 携首个 Apache 版本 3.0.0-alpha 回归

文章插图
 
通过图中可看出,ElasticJob-Lite 的分布式作业节点通过选举获取主节点,并通过主节点进行分片 。分片完毕后,主节点与从节点并无二致,均以自我调度的方式执行任务 。
进程级调度
ElasticJob-Cloud 拥有进程内调度和进程级别调度两种方式 。由于 ElasticJob-Cloud 能够对作业服务器的资源进行控制,因此其作业类型可划分为常驻任务和瞬时任务 。常驻任务类似于ElasticJob-Lite,是进程内调度;瞬时任务则完全不同,它充分的利用了资源分配的削峰填谷能力,是进程级的调度,每次任务的会启动全新的进程处理 。
ElasticJob-Cloud 需要通过 Mesos 对资源进行控制,并且通过部署在 Mesos Master的调度器进行任务和资源的分配 。Cloud采用中心化架构,将调度中心的高可用交由 Mesos管理 。
它的架构图如下:
停滞数年后,ElasticJob 携首个 Apache 版本 3.0.0-alpha 回归

文章插图
 
通过图中可看出,ElasticJob-Cloud 除了拥有 Lite 的全部能力之外,还拥有资源分配和任务分发的能力 。它将作业的开发、打包、分发、调度、治理、分片等一些列的生命周期完全托管,是真正的作业云调度系统 。
相比于 ElasticJob-Lite 的简单易用,ElasticJob-Cloud 对 Mesos 的强依赖增加了系统部署的复杂度,因此更加适合大规模的作业系统 。
 
功能列表ElasticJob 功能主要有弹性调度、资源分配、作业治理和可视化管控 。
  • 弹性调度
弹性调度是 ElasticJob 最重要的功能,也是这款产品名称的由来 。它是一款能够让任务通过分片进行水平扩展的任务处理系统 。
ElasticJob 中任务分片项的概念,使得任务可以在分布式的环境下运行,每台任务服务器只运行分配给该服务器的分片 。随着服务器的增加或宕机,ElasticJob 会近乎实时的感知服务器数量的变更,从而重新为分布式的任务服务器分配更加合理的任务分片项,使得任务可以随着资源的增加而提升效率 。
  • 资源分配
调度是指在适合的时间将适合的资源分配给任务,并使其生效 。ElasticJob 具备资源分配的能力,它能够像分布式的操作系统一样调度任务 。资源分配是借由 Mesos 实现的,由 Mesos 负责分配任务声明的所需资源(CPU 和内存),并将分配出去的资源进行隔离 。ElasticJob 在获取到资源之后才会执行任务 。


推荐阅读