分布式定时任务平台分析 elastic-job和xxl-job

  最近公司有要搭建一个分布式定时任务平台的需求,并把这个任务交给了我。

  首先是作了一番分析了解,分布式定时任务调度系统技术选型 | EFbiz

  可以看到目前市面上常见的定时任务框架有以下这些

  • Quartz:Java事实上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能
  • TBSchedule:阿里早期开源的分布式任务调度系统。代码略陈旧,使用timer而非线程池执行任务调度。众所周知,timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一,只能是获取/处理数据一种模式。还有就是文档缺失比较严重
  • elastic-job:当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2.15,并且可以支持云开发
  • Saturn:是唯品会自主研发的分布式的定时任务的调度平台,基于当当的elastic-job 版本1开发,并且可以很好的部署到docker容器上。
  • xxl-job: 是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展

   可以看到最流行的就是elastic-job和xxl-job,关于这两者理论上的对比,上述文章都有提到,可以看出来两者都是非常优秀的定时任务平台,也都能满足的需求,网上也有很多人在讨论比较两者的优劣。于是我就自己尝试的一下官网的文档和代码分别搭了一套demo,经过实际的使用和比较之后,最终选择了xxl-job,下面我结合上面那片文章说说我自己的理解和原因。

    首先说说更新和维护情况,上面那篇文章是2017年8月写得,到现在过了一年多在github上elastic-job似乎已经没有在更新了,最近一个版本2.15发布于17年7月,最近一年只合并了一个pull request,而xxl-job相对来说就活跃很多最近的一个版本2.01更新与一个月以内,github上提交的代码可以看到2.02页即将发布。因此社区的讨论的活跃程度也更高,使用的公司xxl-job也比elastic-job多了不少。之前两者的star数差不多,现在xxl-job已经高于elastic-job两千多了。

   再来说说使用的感触,elastic-job一开始设计的初衷就是面对高并发复杂业务的,就像网上一篇开发者举得例子——余额宝计算收益,其核心功能在于分片和弹性扩容。尤其是在服务器数量多,业务量大的时候也能非常好的调度,压榨服务器的性能,使用zookeeper使他具有高可用和一致性的同时有很好的可扩展性,elastic-job本身没有中心的概念,通过zookeeper的选举机制选举出主服务器,任何一台服务器都可以作为主服务器,即使主服务器挂了也可以重新选举。因此elastic-job的优势在于它具有更好的可扩展性和可用性,但是这也使得他的使用和配置上比起xxl-job更复杂一些。

  而 xxl-job的是通过一个中心式集群"调度中心”来调度多个执行器执行任务的,调度中心集群可以通过增加机器来实现高可用(HA)实际会造成一定程度上的资源浪费,调度中心通过DB锁保证集群分布式调度的一致性,这样扩展执行器会增大DB的压力,但是如果实际上这里数据库只是负责任务的调度执行。在没有那么多数量的执行器和任务的情况下是完全没问题的。执行器可以支持分布式部署,这实际上就足以满足大多数场景了。关键是原理简单实现也非常简洁,用起来也很轻便,与springboot也非常好集成。而且他的监控界面直接集成到调度中心里面,可以在监控界面直接新增任务,使用GLUE模式甚至可以直接在监控界面上做任务开发写业务代码,这点未必用得到,但是确实很方便;而elastic-job是一个单独的工程连到zk上去监控的,因此不能直接增新增任务,也不能停止执行中的任务。单独记录执行日志到数据库,然后很方便的统一管理和重发,还有失败的邮件提醒都是简单又好用的功能,对于一些常规的定时任务来说感觉应该用起来很舒服。

   综合来说,xxl-job在我看来在业务量没那么大的时候是一个更好的选择。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: xxl-jobelastic-job是两个不同的分布式任务调度框架。 xxl-job是一个国内开源的分布式任务调度平台,提供了任务调度、任务执行、任务监控、报警等功能,支持分布式部署,适用于大规模分布式任务调度场景。 elastic-job是一个国内开源的分布式任务调度框架,提供了分布式任务调度、分布式数据流处理、分布式数据分片等功能,支持多种任务类型,适用于大规模分布式任务调度和数据处理场景。 ### 回答2: xxl-jobelastic-job是两种开源分布式任务调度框架,它们都能够让用户方便地进行任务调度并且提高任务的执行效率。 首先,xxl-job是一款比较受欢迎的国内开源调度框架,它支持多种任务调度模式,包括定时调度、固定频率调度、Cron表达式调度等。同时, xxl-job还提供了一些方便的特性,如任务日志和执行器心跳检测等。作为一款较为成熟的调度框架,xxl-job还提供了完整的Web控制台,用户可以方便地添加和管理任务,并且在控制台上查看任务的执行情况和任务日志。 而elastic-job则是由阿里巴巴公司开源的任务调度框架,它提供了分布式的任务调度能力和高可用的服务治理特性。相比于xxl-jobelastic-job提供了更加灵活的任务调度能力,并且支持分布式任务的动态扩容,使得用户可以更加自由地进行任务调度。 该框架还提供了多种任务类型的支持,如简单任务、数据流任务、脚本任务等,使得用户能够更加方便地进行任务调度。类似于xxl-jobelastic-job同样提供了完善的控制台,用户可以在控制台上管理和监控任务的执行情况和任务日志。 虽然xxl-jobelastic-job都是比较成熟的任务调度框架,但它们在一些细节和特性上还存在差异。因此,用户需要根据自己的需求选择合适的框架,以实现最优的任务调度效果。 ### 回答3: xxl-jobelastic-job是两个广泛应用于分布式任务调度的开源项目。下面将从以下几个方面详细介绍xxl-jobelastic-job。 1.架构设计 xxl-job采用了任务调度器和任务执行器分离的架构设计,任务调度器通过定时发送调度请求到任务队列,任务执行器则通过轮询任务队列获取任务并执行。这种分离的设计方式使得任务调度和执行更加灵活,降低了系统的耦合度。同时,xxl-job还支持多种任务执行模式,包括BEAN模式、CMD模式以及GLUE模式。GLUE模式是一种基于注解和反射机制实现动态调用的方式,灵活性非常高,适用于各种场景。 elastic-job同样采用了分布式的架构设计,并且支持多种任务执行模式,包括在摆渡任务之间均匀地分配作业实例的AVG模式、指定分片序列号执行作业的EXECUTION模式以及动态调度分片和扩容缩容的SCRIPT模式。 2.可扩展性 xxl-job支持多种任务调度器集群模式,包括单机调度器、集群调度器、注册中心调度器和多级调度器。在高并发、大流量、高任务密度的场景下,可以灵活地配置多个任务调度器实例组成集群,提高系统的性能和可靠性。 elastic-job支持分片调度,可以根据作业实例和分片进行分布式并发执行,充分利用资源并提高效率。同时,elastic-job还支持作业分片的动态扩容、缩容,可以根据实际业务变化进行弹性调度。 3.可视化管理 xxl-job提供了可视化的任务管理界面,包括任务列表、任务日志、任务监控等模块,方便管理人员快速了解任务执行情况和进行操作。同时,xxl-job还提供了一套完整的API,方便二次开发和集成。 elastic-job同样提供了易于使用的控制台,支持多维度的作业监控、配置修改、状态管理等功能,降低了系统的运维成本。 总之,xxl-jobelastic-job都是优秀的分布式任务调度框架,在不同场景下都有着良好的应用效果。其中,xxl-job更注重任务分发和管理,适合于一些企业级业务场景;而elastic-job更注重分片执行和弹性调度,适合于一些需要高并发和动态调度的场景。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值