定时任务框架:Xxl-Job和Quartz区别

一、Quartz

支持集群和分布式,但是没有友好的管理界面,功能单一,对于管理调用的任务比较困难。

quartz使用数据库锁。在quartz的集群解决方案里有张表scheduler_locks,quartz采用了悲观锁的方式对triggers表进行行加锁,以保证任务同步的正确性。一旦某一个节点上面的线程获取了该锁,那么这个Job就会在这台机器上被执行,同时这个锁就会被这台机器占用。同时另外一台机器也会想要触发这个任务,但是锁已经被占用了,就只能等待,直到这个锁被释放。

quartz的分布式调度策略是以数据库为边界资源的一种异步策略。各个调度器都遵守一个基于数据库锁的操作规则从而保证了操作的唯一性。同时多个节点的异步运行保证了服务的可靠。但这种策略有自己的局限性:集群特性对于高CPU使用率的任务效果很好,但是对于大量的短任务,各个节点都会抢占数据库锁,这样就出现大量的线程等待资源。这种情况随着节点的增加会越来越严重。

缺点:

quartz的分布式只是解决了高可用的问题,并没有解决任务分片的问题,还是会有单机处理的极限。

二、Xxl-job

轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。目前拥有大量的it企业使用该框架,文档齐全,教程很多,遇到问题也比较容易找到解决方案。

主要特性

简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
调度中心HA(中心式):调度采用中心式设计,“调度中心”基于集群Quartz实现并支持集群部署,可保证调度中心HA;
执行器HA(分布式)ÿ

在选择xxl-job和Quartz时,您可以根据以下几个因素进行考虑:

  1. 集群和分布式:xxl-job和Quartz都支持集群和分布式部署,但Quartz没有自带的管理界面,功能单一,对于管理调用的任务比较困难。而xxl-job提供运维界面,维护成本小,支持调度策略,支持分片和故障转移,更适合分布式场景。
  2. 任务执行逻辑与调度逻辑的耦合性:Quartz的调度逻辑和执行任务是耦合在一起的,这增加了维护的困难。而xxl-job的调度逻辑和执行任务是分离的,易于维护。
  3. 错误预警:xxl-job提供错误预警功能,而Quartz没有。
  4. 与其他组件的兼容性:xxl-job相对Quartz来说,不需要额外的组件(如zookeeper)。

你可能感兴趣的:(定时任务,xxl-job,Quartz)