## ElasticJob单点使用 任务类 ``` public class BackupJob implements SimpleJob { public void execute(ShardingContext
ElasticJob单点使用 任务类 public class BackupJob implements SimpleJob { public void execute(ShardingContext
本文将重点分析ElasticJob的分片机制。 分片机制概述 ElasticJob分片工作机制: 1、ElasticJob在启动时,首先会启动是否需要重新分片的监听器。 判断是否需要重新分片 ElasticJob的事件监听管理器实现类为AbstractListenerManager,主要是在分片节点发送变化后,设置需要重新分片标记。 其类图为: ? ElasticJob的选主监听管理器、分片监听器管理器、故障转移监听管理器等都是AbstractListenerManager的子类。 分片相关的监听管理器类图如图所示: ? newShardingTotalCount); 9 } 10 } 11 } 12 } job配置的分片总节点数发生变化监听器(ElasticJob 本文重点介绍了ElasticJob分片逻辑,其主要分成两个部分: 1、监听分片节点的数量是否发送变化,一点发送变化,就在ZK中增加一个持久节点,该节点的存在就表示需要重新分片。
调度模型 与大部分的作业平台不同,ElasticJob 的调度模型划分为支持线程级别调度的进程内调度 ElasticJob-Lite,和进程级别调度的 ElasticJob-Cloud。 进程内调度 ElasticJob-Lite 是面向进程内的线程级调度框架。通过它,作业能够透明化的与业务应用系统相结合。 进程级调度 ElasticJob-Cloud 拥有进程内调度和进程级别调度两种方式。 由于 ElasticJob-Cloud 能够对作业服务器的资源进行控制,因此其作业类型可划分为常驻任务和瞬时任务。 常驻任务类似于 ElasticJob-Lite,是进程内调度;瞬时任务则完全不同,它充分的利用了资源分配的削峰填谷能力,是进程级的调度,每次任务的会启动全新的进程处理。
ElasticJob-Lite 并不会包含 ssh 免密管理等功能。 ElasticJob-Cloud 为 mesos 框架,由 mesos 负责作业启动和分发。 但需要将作业打包上传,并调用 ElasticJob-Cloud 提供的 RESTful API 写入注册中心。 打包上传属于部署系统的范畴 ElasticJob-Cloud 并未涉及。 怀疑 ElasticJob-Lite 在分布式环境中有问题,但无法重现又不能在线上环境调试,应该怎么做? ElasticJob 已将 IP 地址等敏感信息过滤,导出的信息可在公网安全传输。 7. ElasticJob-Cloud 有何使用限制? 回答: 作业启动成功后修改作业名称视为新作业,原作业废弃。 在 ElasticJob-Cloud 中添加任务后,为什么任务一直在 ready 状态,而不开始执行?
ElasticJob-Cloud 提供应用发布及作业注册等 RESTful API, 可通过 curl 操作。 boolean 否 true 每次执行作业时是否从缓存中读取应用 eventTraceSamplingCount int 否 0(不采样) 常驻作业事件采样率统计条数 参数详细说明: appName: 为 ElasticJob-Cloud
弹性调度 弹性调度是 ElasticJob 最重要的功能,也是这款产品名称的由来。 它是一款能够让任务通过分片进行水平扩展的任务处理系统。 分片 ElasticJob 中任务分片项的概念,使得任务可以在分布式的环境下运行,每台任务服务器只运行分配给该服务器的分片。 随着服务器的增加或宕机,ElasticJob 会近乎实时的感知服务器数量的变更,从而重新为分布式的任务服务器分配更加合理的任务分片项,使得任务可以随着资源的增加而提升效率。 资源最大限度利用 ElasticJob 提供最灵活的方式,最大限度的提高执行作业的吞吐量。 ElasticJob-Lite 实现原理 ElasticJob-Lite 并无作业调度中心节点,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。 注册中心仅用于作业注册和监控信息存储。
高可用 介绍 调度器的高可用是通过运行几个指向同一个 ZooKeeper 集群的 ElasticJob-Cloud-Scheduler 实例来实现的。 ZooKeeper 用于在当前主 ElasticJob-Cloud-Scheduler 实例失败的情况下执行领导者选举。 配置 每个 ElasticJob-Cloud-Scheduler 实例必须使用相同的 ZooKeeper 集群。 例如,如果 ZooKeeper 的 Quorum 为 zk://1.2.3.4:2181,2.3.4.5:2181,3.4.5.6:2181/elasticjob-cloud,则 elasticjob-cloud-scheduler.properties :2181 # ElasticJob-Cloud's ZooKeeper namespace zk_namespace=elasticjob-cloud
资源分配功能为 ElasticJob-Cloud 所特有的功能。 作业运行模式 ElasticJob-Cloud 分为瞬时作业和常驻作业 2 种运行模式。 调度器 ElasticJob-Cloud 基于 Mesos 的 Framework 开发,用于资源调度和应用分发,需要独立启动并提供服务。 作业 即实际运行的具体任务,和 ElasticJob-Lite 共用同样的作业生态。 在注册作业之前必须先注册作业应用。 资源 指作业启动或运行需要用到的 CPU、内存。
ElasticJob 不会在本次执行过程中进行重新分片,而是等待下次调度之前才开启重新分片流程。 当作业执行过程中服务器宕机,失效转移允许将该次未完成的任务在另一作业节点上补偿执行。 在开启失效转移功能之后,ElasticJob 的其他服务器能够在感知到宕机的作业服务器之后,补偿执行该分片作业。如下图所示。 ? 在资源充足的情况下,作业仍然能够在 13:30 完成执行。 ElasticJob 根据触发时的分布式作业执行的不同状况来决定失效转移的执行时机。 适用场景 开启失效转移功能,ElasticJob 会监控作业每一分片的执行状态,并将其写入注册中心,供其他节点感知。
运维平台 运维平台内嵌于 elasticjob-cloud-scheduler 的 jar 包中,无需额外启动 WEB 服务器。
简介 ElasticJob-Cloud 采用自研 Mesos Framework 的解决方案,额外提供资源治理、应用分发以及进程隔离等功能。 ? 对比 ElasticJob-Lite ElasticJob-Cloud 无中心化 是 否 资源分配 不支持 支持 作业模式 常驻 常驻 + 瞬时 部署依赖 ZooKeeper ZooKeeper + Mesos ElasticJob-Cloud 的优势在于对资源细粒度治理,适用于需要削峰填谷的大数据系统。
Publisher Database Event Listener Other Event Listener Unified Schedule API Unified Resource API ElasticJob-Lite Dependency Listener DAG Spring Integrate Namespace Bean Injection Spring Boot Starter ElasticJob-Cloud
作业分片策略,用于将作业在分布式环境下分解成为任务使用。 SPI 名称 详细说明 JobShardingStrategy 作业分片策略 已知实现类 详细说明 AverageAllocationJobShardingStrategy 根据分片项平均分片 OdevitySortByNameJobShardingStrategy 根据作业名称哈希值的奇偶数决定按照作业服务器 IP 升序或是降序的方式分片 RotateServerByNameJobShardingStrategy 根据作业名称轮询分片
线程池策略,用于执行作业的线程池创建。 SPI 名称 详细说明 JobExecutorServiceHandler 作业执行线程池策略 已知实现类 详细说明 CPUUsageJobExecutorServiceHandler 根据 CPU 核数 * 2 创建作业处理线程池 SingleThreadJobExecutorServiceHandler 使用单线程处理作业
本节将探讨ElasticJob故障失效转移机制。我们知道ElasticJob是一款基于Qu-artz的分布式任务调度框架,主要是指数据的分布式。 ElasticJob的核心设计理念是一个任务在多个节点上执行,每个节点处理一部分数据。 为了解决由于任务节点宕机引起任务一个调度周期的一次任务执行部分数据未处理,可以设置开启故障失效转移,将本次任务转移到其他正常的节点上执行,实现与该任务在单节点上进行调度相同的效果(本次调度处理的数据量),ElasticJob 因此,在进入下述内容之前,请先阅读源码分析ElasticJob的分片机制。 ElasticJob是一款分布式任务调度平台,这里的分布式更多指的还是数据的分布式,就是一个任务在多个分片上执行,每个节点根据分片上下文获取部分数据进行处理(数据分片)。 ----
> ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 ElasticJob 的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。 q=g:org.apache.shardingsphere.elasticjob%20AND%20v:3.0.0 下载链接: https://shardingsphere.apache.org/elasticjob 项目地址: https://github.com/apache/shardingsphere-elasticjob ### 社区建设 自 ElasticJob 3.0.0-RC1 发布后,共有 11 [](/img/bVcTij3) 相较 ElasticJob 2.x 版本而言,ElasticJob 3.0.0 对内核进行了大量的重构和解耦,并扩充了一系列的生态对接,例如开箱即用的企业微信或钉钉作业出错通知
Quick Start 引入 Maven 依赖 <dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-cloud-executor</artifactId> <version>${latest.release.version}</version> < memoryMB":64.0,"bootstrapScript":"bin/start.sh","appCacheEnable":true,"eventTraceSamplingCount":0}' http://elasticjob_cloud_host ,"shardingTotalCount":3,"cpuCount":0.1,"memoryMB":64.0}' http://elasticjob_cloud_host:8899/api/job/register
错误处理策略,用于作业失败时的处理策略。 SPI 名称 详细说明 JobErrorHandler 作业执行线程池策略 已知实现类 详细说明 LogJobErrorHandler 记录作业异常日志,但不中断作业执行 ThrowJobErrorHandler 抛出系统异常并中断作业执行 IgnoreJobErrorHandler 忽略系统异常且不中断作业执行
作业开放生态 灵活定制化作业是 ElasticJob 3.x 版本的最重要设计变革。 新版本基于 Apache ShardingSphere 可插拔架构的设计理念,打造了全新作业 API。 意在使开发者能够更加便捷且相互隔离的方式拓展作业类型,打造 ElasticJob 作业的生态圈。 ElasticJob 提供了对作业的弹性伸缩、分布式治理等功能的同时,并未限定作业的类型。 目前 ElasticJob 内置了简单作业、数据流作业和脚本执行作业,并且完全开放了扩展接口,开发者可以通过 SPI 的方式引入新的作业类型,并且可以便捷的回馈至社区。 作业接口 ElasticJob 的作业可划分为基于 class 类型和基于 type 类型两种。 Class 类型的作业由开发者直接使用,需要由开发者实现该作业接口实现业务逻辑。 执行器接口 用于执行用户定义的作业接口,通过 Java 的 SPI 机制织入 ElasticJob生态。