分布式调度框架Elastic-Job和xxl-job区别还是比较明显的,首先明确一下共同点,即它们俩共同解决的问题是什么?
一、解决传统定时任务存在的问题:
1、业务耦合 : 如果需要修改定时任务时间,就需要重新部署整个应用,将会导致整个应用停滞一段时间。
2、单点风险 : 所有调度任务都在单台服务器上执行,当任务执行节点出现问题时,整个定时任务全部终止。
3、资源分配不均衡 : 随着业务越来越多,相应的定时任务也会增多,单台服务器执行任务的压力会越来越大。
二、分布式调度解决的问题
1、分布式调度协调
2、弹性扩容缩容
3、失效转移
4、错过执行作业重触发
5、作业分片一致性,保证同一分片在分布式环境中仅一个执行实例
6、自诊断并修复分布式不稳定造成的问题
7、支持并行调度 支持作业生命周期操作
三、两种方案优缺点对比
1、Elastic-Job 的伸缩性强
Elastic-Job 是一个分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成。
Elastic-Job-Lite 定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式 任务的协调服务。
基于 quartz 定时任务框架为基础的,因此具备 quartz 的大部分功能 使用 zookeeper 做协调,调度中心,更加轻量级 支持任务的分片 支持弹性扩容,可以水平扩展, 当任务再次运行时,会检查当前的服务器数量,重新分片,分片结束之后才会继续执行任务 失效转移,容错处理,当一台调度服务器宕机或者跟 zookeeper 断开连接之后,会立即停止作业,然后再去寻找其他空闲的调度 服务器,来运行剩余的任务 提供运维界面,可以管理作业和注册中心。
Elastic-Job-Lite 是去中心化解决方案。
2、xxl-job的灵活性好:
xxl-job 是一款基于 spring, quartz,netty 开源定时任务框架,解决的问题是不用每一个 job-client 都需要集成 quartz,管 理 cron 配置,尤其 job 很多的时候当容器启动会执行一堆 job,影响启动速度。 原理简单而言就是由 job 配置中心管理通过 quartz 控制客户端 job 触发时机,然后通过 netty rpc 调用执行客户端的具体 实现。 这样中心化的方式可以极大改善 job 的管理成本,还可以配置集群。下面是其全景图:
XXL-JOB 是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 现已开放源代码 并接入多家公司线上产品线,开箱即用。与 E-Job 走无中心化方式不同,XXL-JOB 是中心集权方式。
xxl-job可以部署集群,但是集群之间的节点之间没有关系。
四、xxl-job 使用时经常遇到的问题
1、XXL-JOB的服务器端和用户端版本必须保持一致,不然会报错
2、由于xxl-job使用的一些依赖包与原有项目中的依赖包存在版本冲突,造成java.lang.NoClassDefFoundError错误
3、 netty版本与项目中包冲突,解决方案引入新的包
还有一篇介绍两者区别的问题,可以参考。
到此,两者区别分析完毕,下一篇我们分析 spring task调度器用法,敬请期待!