
Elastic-Job
文章平均质量分 92
ElasticJob源码
宋小生的博客
《中间件源码》 示例先行,深入浅出的源码解析分享
展开
-
解锁 ElasticJob 云原生实践的难题
最近在逛 ElasticJob 官方社区时发现很多小伙伴都在头疼这个 ElasticJob 上云的问题,ElasticJob 本就号称分布式弹性任务调度框架,怎么在云原生环境就有了问题了呢,这就要从 Kubenertes 和 ElasticJob 的一些状态化说起。原创 2023-11-27 18:37:11 · 189 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]-12-调度作业的服务器IP和进程信息的持久化是如何设计的?
作业服务器信息的持久化主要调用了如下两行代码:作业服务器信息上线需要两个节点:我们先来看一下两者区别的表格:①持久实例节点servers持久节点是调用如下代码来进行写入的:参数enabled设置服务器是否启用。enabled参数是上面一开始我们说到的轻量级作业配置LiteJobConfiguration中的disabled属性是否禁用服务器,当禁用配置为false的时候我们才会启用服务器状态,这里对应节点为/{jobName}/servers/{ip},存储数据如下:通过这个节点可以有效的控制作业对应机原创 2022-06-26 14:43:56 · 252 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]-11-基于Zookeeper分布式锁实现选举作业主节点原理
Elastic-Job 定位为轻量级,去中心化,其任务调度由各自的机器驱动,各台机器之间通过Zookeeper去协调,Elastic-Job 为每个任务都创建一个JobScheduler作业调度对象,而在JobScheduler对象的初始化中会为每个Job选举一个主节点,记住这里不是为整个进程的所有作业创建一个全局的主节点,而是每个调度作业都会有一个主节点。那为什么需要为每个作业分别选举出来一个主节点呢?在一个任务执行过程中,有多个机器,每台机器上面都部署一个作业进程,调度系统在执行作业的时候不依赖物理机器原创 2022-06-25 22:15:12 · 364 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]-10- 调度作业的监听器大全
监听机制的实现是一种发布者/订阅者的观察者设计模式的实现。调度系统引入来Netflix实现的Curator组件,通过Curator提供的订阅机制来实现对节点事件订阅。Curator 事件订阅有两种模式:标准的监听模式是使用Watcher 监听器。第二种缓存监听模式引入了一种本地缓存视图的Cache机制,来实现对Zookeeper服务端事件监听。Cache事件监听可以理解为一个本地缓存视图与远程Zookeeper视图的对比过程。Cache提供了反复注册的功能。Cache是一种缓存机制,可以借助Cache实现监原创 2022-06-19 17:28:40 · 324 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]-9- 调度作业启动时的生命周期
注册启动信息主要是启动调度之前做的一些初始化操作主要包含:每一步执行逻辑都比较重要并且包含了特定的逻辑。其中作业配置信息的注册在前面我们已经了解过,作业核心的配置信息以JSON的格式存储在作业的config节点下面,下面我们就来看下其余部分的启动逻辑。启动信息的注册在初始化方法中通过调用调度器门面对象schedulerFacade的registerStartUpInfo方法来触发,如下代码所示:启动信息的注册主要是调度系统向Zookeeper注册调度作业需要的一些基本信息和开启几个用于诊断作业健康状态的服原创 2022-06-18 17:52:07 · 202 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]-8- 使用Quartz为每个作业创建单机执行的调度器对象
作业调度控制器类型为JobScheduleController,这个类型的主要功能是承接调度系统针对Quartz框架Scheduler对象的管理,Quartz的Scheduler对象主要作用是来控制一个作业的绑定,触发,暂停,关闭等操作,JobScheduleController主要实现的操作如下UML图所示:图6.1 作业调度控制器UML通过UML图我们可以看到这个类里面主要的方法都是与作业有关系的比如调度作业,暂停作业,启动作业,触发作业,关闭作业等等。这个类包含了三个成员变量,scheduler,jo原创 2022-06-12 16:24:36 · 242 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]-7-线程安全的单例模式设计全局作业注册表JobRegistry
在作业调度器配置信息同步之后,接下来需要将分片总数写入全局注册表中,方便在程序的任何位置获取分片总数,比如我们后期程序运行时,在调度后台动态修改Zookeeper上存储的分片总数配置,这个时候是需要重新触发分片的,运行中的调度作业程序可以通过判断Zookeeper上发生变更的分片总数与本地注册表中的分片总数进行比较,来判断是否发生了分片总数变更,如果分片总数发生了变更,则需要重新设置分片标记进行重新分片。那接下来就来看下是如何将分片总数写入本地注册表,代码如下:写入过程非常简单只需要一行代码,获取全局单例原创 2022-06-11 09:46:50 · 215 阅读 · 0 评论 -
Elastic-Job2.1.5源码-6-调度作业的配置是如何在分布式场景下存储的?
在前面文章中我们使用Java例子介绍了一个调度程序的开发过程,在注册中心与作业配置信息初始化完毕之后,最后一步就是初始化作业调度器来启动作业,先来回顾下使用Java代码自行创建的作业调度器对象的初始化代码,如下:6.2 init初始化方法6.2.1 init源码init就是调度器初始化的开始, 我们先看一下init的源码初始化过程,先创建JobScheduler对象,作业调度器JobScheduler对象目前只有一个公共方法init()用来初始化作业。我们调用init()方法开始进行作业的初始化,接原创 2022-06-05 09:10:01 · 171 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]-5 调度作业模版类型设计
调度作业是定时调度的核心,调度程序整个生命周期主要是围绕调度作业来说的,从一开始的调度作业配置初始化,调度作业触发,调度作业治理,调度作业监控等等,调度程序都是围绕调度作业来说的,在我们开发的业务场景中可能会有很多相似的场景,可以通过定制作业模版来简化相同类型作业的开发工作,Elastic-Job系统中提供了作业类型JobType枚举来标记作业的类型,目前一共有三种作业枚举类型,分别是:SIMPLE(简单作业)DATAFLOW(数据流)SCRIPT(脚本)这三种作业类型分别对应了前面提到的三种作业配置Sim原创 2022-06-04 09:44:31 · 192 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]- 4 Builder建造者设计模式构造复杂的作业配置
在了解具体配置信息之前我们先来看下调度作业配置信息对象的初始化代码如下:看代码之后我们可以了解到调度作业配置对象初始化过程主要如下图:图4.1 调度作业的初始化过程调度作业配置对象主要有3种:JobCoreConfigurationJobTypeConfigurationLiteJobConfiguration这里我们主要了解了调度作业配置类型的3大类,作业核心配置类型主要封装一些公共的配置信息,作业类型配置类型主要是针对不同种定制作业的配置,轻量级作业配置主要是针对调度使用过程中的一些功能配置,我们需要原创 2022-06-03 10:07:53 · 174 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]- 3 注册中心的设计原理
3 注册中心的设计原理3.1 调度系统使用Zookeeper做什么ZooKeeper 是 Apache 软件基金会的一个软件项目,它是一个针对大型分布式系统的可靠协调系统,为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。调度系统使用Zookeeper进行分布式环境下作业配置信息注册,监听更新,使用Zookeeper实现分布式锁进行主节点选举,使用临时节点实现作业实例上下线等操作。3.2 调度系统注册中心设计在上篇文章中通过Java启动作业调度的Demo我们可以看到Zookeeper初原创 2022-05-29 10:30:17 · 281 阅读 · 0 评论 -
[Elastic-Job2.1.5源码]-1-分布式弹性调度系统的简介
目录1 Elastic-Job 分布式定时任务调度系统的简介1.1 项目介绍1.2 分布式弹性调度系统特征2 Elastic-Job的使用2.1 使用Java代码创建第一个调度例子1 Elastic-Job 分布式定时任务调度系统的简介1.1 项目介绍Elastic-Job是由当当网基于Quartz 二次开发之后的分布式调度解决方案,是一个分布式调度解决方案,由 2 个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。ElasticJob-Lite 定位为原创 2022-05-29 10:24:49 · 296 阅读 · 0 评论 -
分布式弹性调度系统Elastic-Job源码设计原理V0.6
大家好,在这里为大家持续分享下分布式调度系统源码设计,使用原理系列教程,文章发布自公众号:中间件源码 感兴趣可以关注下Elastic-Job2.1.5源码-分布式弹性调度系统的简介1 Elastic-Job2.1.5源码-分布式弹性调度系统的简介1.1 项目介绍1.2 分布式弹性调度系统特征2 Elastic-Job的使用2.1 使用Java代码创建第一个调度例子2.2 使用Spring配置一个作业Elastic-Job2.1.5源码-调度注册中心的设计原理3 注册中心的设计原理3.1原创 2021-05-23 13:49:01 · 1227 阅读 · 4 评论