此内容来自一位好朋友的分享,也是当初建议我写博客提升的朋友。内容只做转载,未做修改。

定时任务选型

背景

  目前项目定时任务采用Spring Task实现,随着项目需求的迭代,新增的定时任务也越来越多。我们也即将面临如下

问题:

  • 任务维护管理(不够直观,不方便管理)

  • 单机事故 (故障)

  • 任务调度混乱(串行,并行。串行可能阻塞)

那么,我们的需求是什么?

  • 图形化管理
  • 支持集群,甚至分布式
  • 任务调度灵活

选型

  重点看了几个目前比较流行的框架:
  • quartz
  • xxl-job
  • elastic-job
  • saturn
  豪不夸张的说,java技术栈中的定时任务框架有两种: quartz其它

Quartz

  quartz是一个基于数据库的调度框架。支持集群,调度灵活。

缺点:

  • 无图形化界面,只提供了API,不方便管理
  • 通过抢占数据库锁来防止多个节点执行同个任务。这也意味着当存在过多节点,任务多且执行频繁的时候可能会有性能问题。

xxl-job

  xxl-job是一款基于quartz封装框架。相比quartz, 其支持友好的图形化界面,功能更为强大。

特色功能:

  • 调度器与执行器分离设计
  • 支持集群,支持分布式(通过分片可完美支持)
  • 任务管理灵活、强大(调度器管理页面可直接写源码)
  • 多语言支持
  • 调度日志及执行日志
  • 负载均衡
  • 故障转移、失败重试
  • 全异步,更轻量
  • 线程隔离(快、慢线程池)

缺点:

  • 抢占锁问题

Elastic-job-lite

  elastic-job也是一款基于quartz封装的框架。对比xxl-job, 两者设计上完全不同,xxl-job为中心化设计,通过调度中心下发调度指令给执行中心。而elastic-job则为无中心化设计。

特色功能:

  • 无中心化设计
  • 解决了quartz的抢占数据库锁问题,改为了zookeeper。
  • 分片功能强大(整体都倾向于分片设计)

缺点:

  • 引入分片机制后,会引入更多复杂的问题,例如拿到分片的机器执行失败怎么处理等,目前还不是很完善
  • 引入注册中心zookeeper。 比较重,还要考虑zookeeper集群

Saturn

  saturn 是基于elastic-job-lite的封装,整体特性与elastic-job-lite相似。故不作具体描述。

对比

以上,分别简述了各个框架,接下来,来个更为直观的表格:

从定时器的选型,到透过源码看XXL-Job(上)的更多相关文章

  1. 从定时器的选型,到透过源码看XXL-Job(下)

    透过源码看xxl-job (注:本文基于xxl-job最新版v2.0.2, quartz版本为 v2.3.1. 以下提到的调度中心均指xxl-job-admin项目) 上回说到,xxl-job是一个中 ...

  2. 追源索骥:透过源码看懂Flink核心框架的执行流程

    li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...

  3. 透过源码看懂Flink核心框架的执行流程

    前言 Flink是大数据处理领域最近很火的一个开源的分布式.高性能的流式处理框架,其对数据的处理可以达到毫秒级别.本文以一个来自官网的WordCount例子为引,全面阐述flink的核心架构及执行流程 ...

  4. 透过源码看看Redis中如何计算QPS

    通常我们采集Redis的性能数据时,或者想要知道Redis当前的性能如何时,需要知道这个实例的QPS数据,那么这个QPS数据是如何计算的呢?我们都有哪些办法或者这个QPS ? QPS顾名思义就是每秒执 ...

  5. 透过源码分析ArrayList运作原理

    List接口的主要实现类ArrayList,是线程不安全的,执行效率高:底层基于Object[] elementData 实现,是一个动态数组,它的容量能动态增加和减少.可以通过元素下标访问对象,使用 ...

  6. 通过源码看android系列之AsyncTask

    整天用AsyncTask,但它的内部原理一直没有特意去研究,今天趁着有时间,码下它的原理. 具体用法就不再说明,相信大家已经用得很熟练了,我们今天就从它怎么运行开始说.先新建好我们的AsyncTask ...

  7. 通过源码看android系列之multidex库

    我们在开发项目时,喜欢引入好多的第三方包,大大的方便了我们的开发,但同时,因为android方法总数的限制,不能超过65k,然而呢,随着我们的开发,65k最终还是会超过,所以,google就给出了这个 ...

  8. 通过源码看原理之 selenium

    # selenium的历史1. selenium1.x:这个时候的selenium,使用的是JavaScript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素 ...

  9. 通过源码了解ASP.NET MVC 几种Filter的执行过程

    一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多人觉得平时根本不需要知道这些,会用就行了.其实阅读源 ...

随机推荐

  1. JWT跨域身份验证解决方案

    JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案.本文介绍JWT的原理和用法. 1. 当前跨域身份验证的问题 Internet服务无法与用户身份验证分开.一般过程如下.1.用户 ...

  2. Jrebel 远程热部署[Idea]

    服务器端 客户端-idea remote module 在服务器端,Tomcat的webapps下新建项目文件夹,如: demo/WEB-INF/classes/[jrebel.xml]

  3. 开源DDD设计模式框架YMNNetCoreFrameWork第6篇-.net Core Logging和Nlog结合

    源码地址:https://github.com/topgunymn/YMNNetCoreFrameWork 遇到的坑:使用了Nlog以后,.NETcore自带的日志等级不起作用,只有nlog配置配置文 ...

  4. 十四、SAP中定义自定义变量

    一.利用关键字TYPE定义类型,然后在定义此类型的变量,代码如下: 二.效果如下:

  5. OIer常见问题与错误总结

    作为一名OIer,无论是一名刚入门的蒟蒻,还是叱诧风云的神犇,相信都会难免去犯一些错误(废话不犯错误岂不是都满分了(ノへ ̄.).在这里总结了一些OIer常见易犯的错误,与大家共勉. 1.正常错误 可能 ...

  6. 三、ReactJS、jsx、 Component 特性

    reactjs特性: 基于组件(Component)化思考 用 JSX 进行声明式(Declarative)UI 设计 使用 Virtual DOM Component PropType 错误校对机制 ...

  7. 如何安装Anaconda

    如何安装Anaconda Python作为一门易读.易维护的语言,在工作和学习中应用广泛,被大量用户所欢迎.本文主要给大家介绍一下Anaconda 步骤 1 Anaconda在官网就可以下载,网址:h ...

  8. UVA - 11892 ENimEN(博弈)

    题意:有n堆石子,两个人拿,拿走最后的石子的人赢,poopi先拿,条件是,每个人必须从另外一个人最后拿过的石子堆中取石子,若那堆石子被拿没了,才可以自由地拿其他堆.要求每次拿的石子数不能为0.问谁赢. ...

  9. 超低功耗Sub-1GHz性价比首选方案:CMT2300

    关于超低功耗Sub-1GHz射频收发器,目前性价比方面CMT2300是一款大多客户的首选方案,不管是成本方面还是性能方面,都能大大的满足客户的需求.下面为大家讲解下CMT2300 这款Sub-1GHz ...

  10. VM15上安装macOS操作系统

    (该篇博客已经成功安装上Xcode,放心下载) 因为要开学了,需要学习mac操作系统,自己没有苹果电脑只能虚拟机上下载喽 我在电脑上安装的VM15虚拟机,不会安装的可以来这里下载软件VM15虚拟机   ...