下面对elastic-Job和xxl-Job做个简单的描述和对比
一、区别
1、XJob环境依赖于mysql,不依赖ZooKeeper,
2、EJob依赖ZooKeeper
1、X-Job 侧重的业务实现的简单和管理的方便,学习成本简单,
失败策略和路由策略丰富。推荐使用在“用户基数相对少,服务器数量在一定范围内”的情景下使用
2、E-Job 关注的是数据,增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。
但是学习成本相对高些,推荐在“数据量庞大,且部署服务器数量较多”时使用
二、基础知识介绍
1、什么是分布式任务调度
分布式任务调度就是在分布式环境下,定时任务的管理与执行
2、分布式任务调度的特性
分布式环境下,一个任务被部署在多实例的情况下,只有一个定时任务可执行
3、什么是任务分片
一个定时任务可以分成多个小任务并行执行(通常称为切片)
4、集群和分布式
集群:当单节点性能不足的时候,多个节点组合起来共同满足外部业务需要。
分布式:将业务需求分解成多个子业务,然后将各个子业务分别部署多个节点
使用场景:什么会使用定时任务
1、时间驱动的场景:某个时间点发送优惠券,发送短信,取消未支付订单等等。
2、批量处理数据:批量统计上个月的账单,全量同步商品数据等等。
3、固定频率的场景:每隔一定时间需要执行一次。
传统的定时任务的缺点,比如Timer,Quartz等都或多或少存在一些问题
1、不支持集群高可用,没有监控、故障告警等。
2、没有统一管理平台,不支持统计和追踪各个服务节点任务调度的结果等
3、不支持分布式任务调度:同一个服务多个实例的任务存在互斥时,需要统一的调度。
针对上面缺点,我们以Elastic-Job-lite框架为例说明
1、防止重复执行
在分布式环境中,任务能够按指定的调度策略执⾏,并且能够避免同⼀任务多实例重复执⾏
Elastic-Job依赖于Zookeeper进⾏分布式协调,每个Elastic-Job的任务执⾏实例App作为Zookeeper的客户端,进而操作ZooKeeper的znode,多个实例同时创建/leader节点,/leader节点只有一个实例能创建成功,其他的会创建失败,创建成功的实例会被选为leader节点执行任务
2、去中心化
中心化和去中心化
举例:比如业务系统A、业务系统B、业务系统C那么如果这三个业务系统两两之间需要交互。 就存在以下2个方式
1、ABC三者的协同都需要通过"中转服务"来完成,中转服务挂了整个系统就挂了
2、ABC之间可以点对点协同交互。
那么对于场景1就是中心化框架,场景2就是去中心化框架。典型的例子就是微服务A和微服务B直接的调用。
Zookeeper是去中心化,虽然选举出一个leader,多个follower,但是leader和follower是可以直接交互的。
3、任务分片
任务分片就是将一个定时任务分成多个小任务,每个小任务可以并发执行,具体的分片策略也可以自由制定,分⽚和任务本身是通过⼀个注册中⼼协调的。
4、弹性扩容,高可用
新增加⼀个运⾏实例,如job3,它会⾃动注册到注册中⼼,注册中⼼发现新的服务上线,注册中⼼会通知ElasticJob 进⾏重新分⽚
如果所有的节点挂掉,只剩下⼀个节点,所有分⽚都会指向剩下的⼀个节点,这也是ElasticJob的⾼可⽤
二、elastic-Job
elastic-job是由当当网基于quartz二次开发之后的分布式调度解决方案,由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成 。
1、ElasticJob-Lite定位是无中心化的分布式定时调度框架,采用zookeeper实现分布式协调,实现任务高可用、任务可分片执行。
2、ElasticJob-Cloud提供资源治理、应用分发以及进程隔离等功能。
官网介绍:可面对高并发复杂的业务,即使是在业务量大,服务器多的时候也能做好任务调度,尽可能的利用服务器的资源。使用ZooKeeper使其具有高可用、一致性的,而且还具有良好的扩展性
elasticjob通过ZooKeeper的选举机制选举出主服务器,如果主服务器挂了,会重新选举新的主服务器。因此elasticjob具有良好的扩展性和可用性,但是使用和运维有一定的复杂
三、xxl-Job
xxl-job 通过一个中心式的调度平台,调度多个执行器执行任务,调度中心通过DB锁保证集群分布式调度的一致性,这样扩展执行器会增大DB的压力,但是如果实际上这里数据库只是负责任务的调度执行。但是如果没有大量的执行器的话和任务的情况,是不会造成数据库压力的。实际上大部分公司任务数,执行器并不多(虽然面试经常会问一些高并发的问题)。
xxl-job中心式的调度平台轻量级,开箱即用,操作简易,上手快,与SpringBoot有非常好的集成,而且监控界面就集成在调度中心,界面又简洁,对于企业维护起来成本不高,还有失败的邮件告警等等
xxl-job环境依赖于mysql,不依赖ZooKeeper