Elastic-Job是一个无中心化的分布式定时调度框架,它主要由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite是一个轻量级的解决方案,使用jar包的形式提供分布式任务的协调服务。下面将重点介绍Elastic-Job-Lite的原理流程。
Elastic-Job-Lite的整体架构中并没有作业调度中心节点,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。其注册中心仅用于作业注册和监控信息存储,而主作业节点则用于处理分片和清理等功能。
Elastic-Job-Lite的工作原理可以概括为以下几个步骤:
- 添加或更新作业配置信息:在启动服务时,程序会进入JobSchedule类的init方法,进行任务的初始化等操作。这时,会添加或更新作业配置信息,并将配置信息持久化到Zookeeper上。
- 创建Quartz调度器:作业的调度执行依赖Quartz技术。因此,会创建一个Quartz调度器,用于按照设定的时间规则触发任务的执行。
- 启动监听器和注册信息:启动所有的监听器,包括leader选举监听、失效转移监听、分片监听等。并发起主节点选举,将leader节点信息set到leader/election/instance节点下。同时,将服务器信息、实例信息注册到Zookeeper上,并且在leader/sharding下创建necessary节点,作为重新分片的标记。
- 任务调度执行:最后,由Quartz调度器根据cron表达式调度执行。当定时任务启动时,会进入LiteJob类,它实现了Quartz框架的Job接口。在这个实现类中,会完成失效转移项执行、重新分片、获取并执行本机任务项、错过任务重触发等操作。
Elastic-Job-Lite通过以上的原理和流程,实现了分布式调度协调、弹性扩容缩容、失效转移、错过执行作业重触发、作业分片一致性保证等功能,从而能够更大限度地利用分布式服务器的资源,并执行定时任务。
以上是对Elastic-Job-Lite原理流程的简要介绍,如需更详细的信息,可以查阅Elastic-Job的官方文档或相关教程。