一概念
elastic-job 是基于Zookepper和Quartz开发并开源的分布式定时任务,解决了Quartz不支持分布式的弊端。支持扩容,由Zookepper监控和管理job,支持失效转移(失效转移是一种备份模式,当主要组件无法工作时,系统组件功能转嫁到二级组件)
二Quartz,Spring-task存在的问题
1不敢轻易随服务节点部署,可能会重复多次执行导致系统逻辑发生问题
2Quartz 的寄去仅仅用作HA随着节点的增加每次的执行效率并不能提高,即不支持水平扩展
三Quartz,Spring-task,elastic-job的区别
Spring-task:
1量级轻,配置简单
2调度任务是串行,每次执行任务都只有一个对象如果定义了多个定时任务,当前一个定时任务没有跑完,那么就 算 是下一个任务到了定时的时间也不会执行
3当定时任务出现异常时,整个定时器任务生命周期结束,不会在继续执行别的定时任务
4可以通过注解配置job
Quartz:1每次执行任务都会创建一个任务对象,调度任务可以控制,默认情况下当前一个定时任务没有执行完毕,下一个定时任 务也会执行,但是可以通过配置使他串行执行
2Quartz用有Spring-task的所有功能
3当执行定时任务抛出异常时,下一个定时任务仍然可以正常执行
4需要手动配置job
5可以采用集群方式分布式部署在多台机器,分配执行定时任务
elastic-job:elastic-job是基于Zookepper和Quartz开发的,开源的定时任务,具备Quarz的全部功能
elastic-job的组成
elastic-job由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成,一般来说使用Elastic-Job-Lite就能够满足需求
elastic-job工作原理
当用户数量庞大时,elastic-job底层调用Quartz通过zookeeper动态给任务进行分片处理,再执行任务时可以通过集群水平扩展,集群的每个节点都负责处理一定数量的数据,当任务量庞大时,可以通过增加集群节点来解决,若需n台机器跑任务,则可以将任务分为n片,框架通过zk协调最终让n台机器分到任务片,再此基础上在增加一台机器n+1,此时n+1无法获取到任务分片,作业程序将不会执行,但是如果n台机器中有某一台出现问题挂了,那么这台问题机器的任务分片会被n+1这台机器执行,替代这台问题机器;如果又有一台机器挂了,那么他的任务分片会随机分配到已存在且正常运行的机器上,这种特性成为弹性扩容
1分片概念:分布式任务的执行将一个任务拆分为多个独立的子任务,由分布式机器执行一个或多个子任务
定时任务分类:1Simple类型定时任务:需要实现SimpleJob接口,是未经过任何封装的定时任务的简单实现
2Dataflow类型定时任务:主要用于处理数据流,需要实现DataflowJob接口,接口可以提供2个方法可供覆盖,分 别用于抓取(fetchData)和处理(processData)数据。
3Script类型定时任务:意为脚本类型作业,支持shell,python和perl等所有类型脚本,应用得不太多