分布式定时任务

1. 什么是分布式定时任务

把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务.

2. 常见开源方案

elastic-job ,xxl-job ,quartz , saturn,  opencron , antares

elastic-job

elastic-job 是由当当网基于quartz 二次开发之后的分布式调度解决方案 , 由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成 。

Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。

Elastic-Job-Cloud使用Mesos + Docker(TBD)的解决方案,额外提供资源治理、应用分发以及进程隔离等服务

亮点:

基于quartz 定时任务框架为基础的,因此具备quartz的大部分功能

使用zookeeper做协调,调度中心,更加轻量级

支持任务的分片

支持弹性扩容 , 可以水平扩展 , 当任务再次运行时,会检查当前的服务器数量,重新分片,分片结束之后才会继续执行任务

失效转移,容错处理,当一台调度服务器宕机或者跟zookeeper断开连接之后,会立即停止作业,然后再去寻找其他空闲的调度服务器,来运行剩余的任务

提供运维界面,可以管理作业和注册中心。

elastic-job结合了quartz非常优秀的时间调度功能,并且利用ZooKeeper实现了灵活的分片策略。除此之外,还加入了大量实用的监控和管理功能,

以及其开源社区活跃、文档齐全、代码优雅等优点,是分布式任务调度框架的推荐选择。

由于elastic-job-lite  不支持动态添加作业,此处仅贴上elastic-job-Cloud架构图

xxl-job

由个人开源的一个轻量级分布式任务调度框架 ,主要分为 调度中心和执行器两部分 , 调度中心在启动初始化的时候,会默认生成执行器的RPC代理

对象(http协议调用), 执行器项目启动之后, 调度中心在触发定时器之后通过jobHandle 来调用执行器项目里面的代码,核心功能和elastic-job差不多

,同时技术文档比较完善

系统架构图:

quartz

quartz 的常见集群方案如下,通过在数据库中配置定时器信息, 以数据库悲观锁的方式达到同一个任务始终只有一个节点在运行,

优点:

保证节点高可用 (HA), 如果某一个几点挂了, 其他节点可以顶上

缺点:

同一个任务只能有一个节点运行,其他节点将不执行任务,性能低,资源浪费

当碰到大量短任务时,各个节点频繁的竞争数据库锁,节点越多这种情况越严重。性能会很低下

quartz 的分布式仅解决了集群高可用的问题,并没有解决任务分片的问题,不能实现水平扩展

Saturn

Saturn是唯品会在github开源的一款分布式任务调度产品。它是基于当当elastic-job 1.0版本来开发的,其上完善了一些功能和添加了一些新的feature。

亮点:

支持多语言开发 python、Go、Shell、Java、Php。

管理控制台和数据统计分析更加完善

缺点:

技术文档较少 , 该框架是2016年由唯品会的研发团队基于elastic-job开发而来的

opencron

一个功能完善真正通用的linux定时任务调度定系统,满足多种场景下各种复杂的定时任务调度,同时集成了linux实时监控,webssh,提供一个方便管理定时任务的平台

缺点:仅支持  kill任务, 现场执行,查询任务运行状态 等, 主要功能是着重于任务的修改和查询上。 不能动态的添加任务以及任务分片。

antares

优点:

一个任务仅会被服务器集群中的某个节点调度,调度机制基于成熟的 quartz

并行执行 , 用户可通过对任务预分片,有效提升任务执行效率

失效转移

弹性扩容,在任务运行时,可以动态的加机器

友好的管理控制台

缺点:

不能动态的添加任务,仅能在控制台对任务进行触发,暂停,删除等操作

文档不多,开源社区不够活跃

系统架构图如下:

4. 比较

此处列出了几个代表性的开源产品

feature

quartz

elastic-job-cloud

xxl-job

antares

opencron

依赖

mysql

jdk1.7+, zookeeper 3.4.6+ ,maven3.0.4+ ,mesos

mysql ,jdk1.7+ , maven3.0+

jdk 1.7+ , redis , zookeeper

jdk1.7+ , Tomcat8.0+

HA

多节点部署,通过竞争数据库锁来保证只有一个节点执行任务

通过zookeeper的注册与发现,可以动态的添加服务器。 支持水平扩容

集群部署

集群部署

任务分片

支持

支持

支持

文档完善

完善

完善

完善

文档略少

文档略少

管理界面

支持

支持

支持

支持

难易程度

简单

较复杂

简单

一般

一般

公司

OpenSymphony

当当网

个人

个人

个人

高级功能

弹性扩容,多种作业模式,失效转移,运行状态收集,多线程处理数据,幂等性,容错处理,spring命名空间支持

弹性扩容,分片广播,故障转移,Rolling实时日志,GLUE(支持在线编辑代码,免发布),任务进度监控,任务依赖,数据加密,邮件报警,运行报表

任务分片, 失效转移,弹性扩容 ,

时间规则支持quartz和crontab ,kill任务, 现场执行,查询任务运行状态

缺点

没有管理界面,以及不支持任务分片等。不适用于分布式场景

需要引入zookeeper , mesos, 增加系统复杂度, 学习成本较高

调度中心通过获取 DB锁来保证集群中执行任务的唯一性, 如果短任务很多,随着调度中心集群数量增加,那么数据库的锁竞争会比较厉害,性能不好。

不支持动态添加任务

不适用于分布式场景

使用企业

大众化产品,对分布式调度要求不高的公司大面积使用

36氪,当当网,国美,金柚网,联想,唯品会,亚信,平安,猪八戒

大众点评,运满满,优信二手车,拍拍贷

php面试题 优信二手车_分布式定时任务对比 - sharedCode的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. mysql中间件面试题_面试题集锦-中间件 - 春哥大魔王的博客的个人空间 - OSCHINA - 中文开源技术交流社区...

    Mysql引擎区别,聚簇索引是数据,非聚簇索引是引用,普通索引和主键索引两棵树,普通索引到主键索引有个回表,建立覆盖索引减少回表,利用前缀索引,注意索引顺序,隔离级别默认rr,事务依赖于mvcc,B+ ...

  2. python遗传算法最短路径问题有几种类型_遗传算法求最短路径 - osc_tn8uhjgi的个人空间 - OSCHINA - 中文开源技术交流社区...

    实例描述 配送中心数为 $1$,客户数 $k$为 $8$,车辆总数 $m$为 $2$:车辆载重皆为 $8$ 吨:各客户点需求为 $g(i = 1, 2, ... , 8)$(单位为吨),已知客户点与配 ...

  3. python设计模式理解_如何理解设计模式 - PythonJsGo的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.设计模式是什么? 设计模式是软件设计中常见问题的典型解决方案. 它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题.设计模式与方法或库的使用方式不同, 你很难直接在自己的程序 ...

  4. java绘制统计直方图取平均_统计学——直方图解析 - osc_lv8qb16y的个人空间 - OSCHINA - 中文开源技术交流社区...

    直方图(Histogram),又称质量分布图,是一种统计报告图, 由一系列高度不等的纵向条纹或线段表示数据分布的情况. 一般用 横轴表示数据类型,纵轴表示分布情况. 直方图是数值数据分布的精确图形表示 ...

  5. python获取中文字体点阵坐标_点阵汉字显示 - freecamel的个人空间 - OSCHINA - 中文开源技术交流社区...

    目录: DOS下的点阵汉字 汉字的内码 汉字字模 汉字库文件 打印字库文件和HZK12 main() { unsigned char *s,*e="ABcd",*c="你 ...

  6. mysql连库串_数据库连接串整理 - osc_ac5z111b的个人空间 - OSCHINA - 中文开源技术交流社区...

    常用JDBC驱动与连接字符串 MySQL driver:com.mysql.jdbc.Driver url:jdbc:mysql://localhost:3306/mydb MySQL url格式:j ...

  7. emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.准备一台笔记本电脑,一根网线即可. 2.将网线一头连接笔记本电脑,另一头连接存储.(连接存储的一头应连接到有扳手图标的那一网口上) 3.配置IP地址 IP:128.221.1.254 子网掩码:2 ...

  8. python 白盒测试_白盒测试教程 - 颜丽的个人空间 - OSCHINA - 中文开源技术交流社区...

    总共贴了39节,后续还有很长,共122节,文章名为'白盒测试教程' 1.白盒测试概念 2.测试覆盖标准 3.逻辑驱动测试 4.基本路径测试 白盒测试概念 1.白盒测试也称结构测试或逻辑驱动测试,是一种 ...

  9. java运动员最佳配对_运动员最佳配对问题 - osc_y1pyjby5的个人空间 - OSCHINA - 中文开源技术交流社区...

    这道题可以看为排列数的一个典型模块 一.算法实现题: 1.问题描述: 羽毛球队有男女运动员各n人,给定2个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q ...

最新文章

  1. Dubbo管控台Windows安装
  2. Android版‘音乐一点通’音乐播放器详情
  3. 荒野乱斗角色设计浅谈
  4. iOS之深入探究多线程实现、线程安全和线程死锁
  5. 调用支付jsapl缺少参数:totalfee openid无法取得_微信支付的架构到底有多牛?
  6. 【CodeForces - 618A】Slime Combining(二进制,思维)
  7. 深入理解JAVA虚拟机学习笔记(一)JVM内存模型
  8. python-列表包字典-根据字典的某一个键的值来进行排序
  9. 如何限制访问电脑磁盘
  10. 3.4.1 - Numeric Types
  11. 王春晖:发展自主知识产权的网安核心技术迫在眉睫
  12. 预定义类型未定义或导入_LimeSurvey基础教程(二)——问题类型
  13. php小程序支付notify,PHP 小程序支付
  14. Linux下的Vivado安装——以Ubuntu为例
  15. Python实现简易TCP服务器
  16. lookAhead和RAdam 真香
  17. java json 解析字符串_java-解析JSON字符串的最简单方法
  18. opengl——贴图
  19. 抖音带货赚钱吗?有哪些技巧?
  20. Neo4j-简单使用

热门文章

  1. 【Vue.js】Vue.js组件库Element中的单选框、多选框、输入框和计数器
  2. 计算机知识科普策划方案,中国科普博览--中国优秀文化网站、全国优秀科普网站...
  3. 一个一站式流式处理云平台解决方案
  4. 随记随提-第一次团队会议
  5. 提高国内VSCode下载速度,包含deb等格式
  6. 2023上海国际天然食用胶产业展览会暨发展大会
  7. android+动态设置权重,Android自适应布局(关于权重weight的使用技巧!)
  8. Android进程优先级处理大全
  9. xposed微信红包
  10. NIUSHOP商城系统短信宝短信插件