全云化架构(十一):分布式定时任务框架对比
分布式定时任务框架对比
把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。
常见的分布式定时任务平台有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 不支持动态添加作业,架构图如下
二、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
并行执行 , 用户可通过对任务预分片,有效提升任务执行效率
失效转移
弹性扩容,在任务运行时,可以动态的加机器
友好的管理控制台
缺点:
不能动态的添加任务,仅能在控制台对任务进行触发,暂停,删除等操作
文档不多,开源社区不够活跃
系统架构图如下:
七、比较
此处列出了几个代表性的开源产品
quartz | elastic-job | 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+ |
部署方式 | 多节点部署,通过竞争数据库锁来保证只有一个节点执行任务 | 通过zookeeper的注册与发现,可以动态的添加服务器。 支持水平扩容 | 集群部署 | 集群部署 | —— |
任务分片 | —— | 支持 | 支持 | 支持 | —— |
文档 | 完善 | 完善 | 完善 | 文档略少 | 文档略少 |
管理界面 | 无 | 支持 | 支持 | 支持 | 支持 |
难易程度 | 简单 | 较复杂 | 简单 | 一般 | 一般 |
公司 | OpenSymphony | 当当网 | 个人 | 个人 | 个人 |
高级功能 | —— | 弹性扩容,多种作业模式,失效转移,运行状态收集,多线程处理数据,幂等性,容错处理,spring命名空间支持 | 弹性扩容,分片广播,故障转移,Rolling实时日志,GLUE(支持在线编辑代码,免发布),任务进度监控,任务依赖,数据加密,邮件报警,运行报表,国际化 | 任务分片, 失效转移,弹性扩容 , | 时间规则支持quartz和crontab ,kill任务, 现场执行,查询任务运行状态 |
缺点 | 没有管理界面,以及不支持任务分片等。不适用于分布式场景 | 需要引入zookeeper , mesos, 增加系统复杂度, 学习成本较高 | 调度中心通过获取 DB锁来保证集群中执行任务的唯一性, 如果短任务很多,随着调度中心集群数量增加,那么数据库的锁竞争会比较厉害,性能不好。 | 不支持动态添加任务 | 不适用于分布式场景 |
使用企业 | 大众化产品,对分布式调度要求不高的公司大面积使用 | 36氪,当当网,国美,金柚网,联想,唯品会,亚信,平安,猪八戒 | 大众点评,运满满,优信二手车,拍拍贷 | —— | —— |
全云化架构(十一):分布式定时任务框架对比相关推荐
- 巨杉数据库SequoiaDB助力商业银行云化架构升级
转载自 https://blog.csdn.net/SequoiaDB_Official/article/details/89374120 作为一款金融级分布式关系型数据库,SequoiaDB巨杉数据 ...
- 巨杉数据库助力民生银行、恒丰银行云化架构升级
作为一款金融级分布式关系型数据库,SequoiaDB巨杉数据库的分布式数据库架构和面向微服务的云化产品形态,已经帮助包括民生银行.恒丰银行在内的多家大型金融客户实现了大量业务系统的底层数据库云化转型升 ...
- 九年双11云化架构演进和升级,打造更加完美的双11
摘要: 12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的<2017阿里巴巴双11技术十二讲>顺利结束,集中为大家分享了2017双11背后的黑科技.本文是<阿里巴巴云化架构创 ...
- 双11稳定性负责人叔同讲述:九年双11的云化架构演进和升级
阿里妹导读:阿里巴巴9年双11经历下来,交易额增长了280倍.交易峰值增长800多倍.系统数呈现爆发式增长.系统在支撑双11过程中的复杂度和支撑难度以指数级形式上升.双11峰值的本质是用有限的成本最大 ...
- 【恩墨学院】迈向信息化2.0:贵州交警“互联网+智慧交通”云化架构的探索实践...
[恩墨学院]迈向信息化2.0:贵州交警"互联网+智慧交通"云化架构的探索实践 如今贵州地区,市民只需打开手机APP,就能够快速便捷地享受到诸如路况查询.违章处理.罚款缴纳等一系列自 ...
- 海航科技集团旗下易建科技构建双活云化架构 为电商保驾护航
"双十一"已经过去,剁手党们都在焦急的等快递的到来.不过,依据小编的自身体会,很多人在"双十一"疯狂抢购时还是留下了一些遗憾,那就是因为网站卡顿导致没能秒杀到自 ...
- 数字中台全云化,抓住中国新型消费提质升级重要窗口期
2019年,我国人均GDP站上1万美元大关,2020年进一步站稳1万美元关口,由此正式拉开了中国消费升级的大幕."十三五"期间,中国实物商品网上零售额占社会消费品零售总额的比重由2 ...
- 第五章 - 分布式定时任务框架ElasticJob之SpringBoot整合SimpleJob作业(实战一)
系列文章目录 第一章 - 分布式定时任务框架ElasticJob之JavaApi整合Simple作业 第二章 - 分布式定时任务框架ElasticJob之JavaApi整合DataflowJob作业 ...
- 轻量级分布式定时任务框架XXL-Job
轻量级分布式定时任务框架XXL-Job: XXL-JOB是一款轻量级的分布式定时任务框架,上手简单,操作容易,XXL-Job可以到官网下载也可以去gitee上拉取源码,其中核心模块分页两个:1:是分布 ...
最新文章
- 字符设备驱动开发流程详解
- Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
- node.js 建立live-server
- linux在指定目录多个文件中搜索关键字
- linux 线程与进程 pid,linux下线程所属进程号问题
- 友盟渠道统计mysql_cnzz友盟怎么安装网站统计代码监控网站流量
- Kaggle-泰坦尼克号
- python re正则_正则表达式+Python re模块详解
- emacs之配置代码风格
- 发电机机房设计规范_柴油发电机的容量选择,以及柴油发电机机房设计规范要求!...
- Springboot+Thymeleaf《药品管理系统》
- OCJP考试习题(1z0-808)(一)
- [ios] - TommyBros(山寨马里奥) – 开源游戏
- ListView优化问题
- 设定自己的100个人生目标
- python在股市有什么作用_一颗韭菜的自我修养:用Python分析下股市,练练
- 父级fixed_position:fixed相对父级元素定位而不是浏览器
- 互联网广告行业(01)------ 初识了解DSP、SSP、ADX
- 在ubuntu上搭建IC数模混合环境
- 快递面单隐私保护教程
热门文章
- 手机QQ浏览器背后技术和服务架构
- MYSQL查询同时包含两行数据的数据(用户既买了商品A又买了商品B)
- 为什么我十分喜欢C,却很不喜欢C++?
- 【华为云】7天玩转DevOps实战营免费招募启动!7天晋升DevOps大师!
- 《JavaScript:The Good Parts(影印版)》克罗克福特
- 微信小程序怎么给数据库的一个记录里新增图片数据?
- 谷歌chrome浏览器无法自动播放video标签视频的问题
- access 英语什么意思_access 中文意思是?搞懂英文「access」的意思!
- html5滚动字幕添加图片,抖音视频怎么加动态文字 竖版图片加视频及滚动字幕的方法...
- 影流服务器显示无法连接服务器,腾讯服务器崩溃?王者荣耀网络异常,LOL服务器也炸了...