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

定时任务选型

背景

  目前项目定时任务采用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. HDU - 1394 Minimum Inversion Number(线段树求逆序数---点修改)

    题意:给定一个序列,求分别将前m个数移到序列最后所得到的序列中,最小的逆序数. 分析:m范围为1~n,可得n个序列,求n个序列中最小的逆序数. 1.将序列从头到尾扫一遍,用query求每个数字之前有多 ...

  2. 史无前例!一季度Facebook移除22亿假账号

    导读 北京时间5月26日上午消息,Facebook表示平台在第一季度移除了22亿虚假账号.这一创纪录的数据显示了这家公司正在与大量试图破坏全球最大社交网络真实性的负面因素进行斗争. 北京时间5月26日 ...

  3. 5款国内免费CDN服务商及使用点评

    第一款,百度加速乐 加速乐目前被百度收购,这样百度也有了自己运营的CDN产品,可以丰富自身站长平台工具使用用户群.目前有免费用户和付费用户的区别,对于一般的网站免费方案也足够使用.特点具备智能解析.加 ...

  4. TS-Lint 安装方法

    1  在 Visual Studio Extensions  里下载 TSLint  2  在项目根目录下放 tslint.json 文件 (里面的规则定死就好 我认为没有特别大的意义)

  5. tomcat端口号被占用,且杀进程不能够杀掉解决办法

    在电脑上安装了zookeeper以后,配置好tomcat启动发现端口号8009端口号被占用,报错如下: 采用netstat –ano 查询所有进程查看或者根据端口号查进程netstat -ano |f ...

  6. Redis 详解 (二) redis的配置文件介绍

    目录 1.开头说明 2.INCLUDES 3.MODULES 4.NETWORK 5.GENERAL 6.SNAPSHOTTING 7.REPLICATION 8.SECURITY 9.CLIENTS ...

  7. Oracle rownum用法、分页

    转载:ORACLE 中ROWNUM用法总结!  第一部分 1.对于 Oracle 的 rownum 问题,很多资料都说不支持 >, >= , =,  between...and ,只能用 ...

  8. Springboot Bean循环依赖问题

    参考博客原文地址: https://www.jb51.net/article/168398.htm https://www.cnblogs.com/mianteno/p/10692633.html h ...

  9. MacType

    #前言 这几天实在是嫌弃Win10垃圾的字体渲染效果--发虚模糊,索性从网上找了个系统字体渲染软件即MacType给系统字体改头换面. #使用效果 这里贴出两个场景的效果对比(单击图片查看具体效果) ...

  10. Java多线程的应用

    一.概述 提到线程不得不提进行.因为线程是进程的一个执行单元.下面对线程和进程分别进行介绍. 1.进程 进程是当前操作系统执行的任务,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概 ...