php面试题 优信二手车_分布式定时任务对比 - sharedCode的个人空间 - OSCHINA - 中文开源技术交流社区...
分布式定时任务
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 - 中文开源技术交流社区...相关推荐
- mysql中间件面试题_面试题集锦-中间件 - 春哥大魔王的博客的个人空间 - OSCHINA - 中文开源技术交流社区...
Mysql引擎区别,聚簇索引是数据,非聚簇索引是引用,普通索引和主键索引两棵树,普通索引到主键索引有个回表,建立覆盖索引减少回表,利用前缀索引,注意索引顺序,隔离级别默认rr,事务依赖于mvcc,B+ ...
- python遗传算法最短路径问题有几种类型_遗传算法求最短路径 - osc_tn8uhjgi的个人空间 - OSCHINA - 中文开源技术交流社区...
实例描述 配送中心数为 $1$,客户数 $k$为 $8$,车辆总数 $m$为 $2$:车辆载重皆为 $8$ 吨:各客户点需求为 $g(i = 1, 2, ... , 8)$(单位为吨),已知客户点与配 ...
- python设计模式理解_如何理解设计模式 - PythonJsGo的个人空间 - OSCHINA - 中文开源技术交流社区...
一.设计模式是什么? 设计模式是软件设计中常见问题的典型解决方案. 它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题.设计模式与方法或库的使用方式不同, 你很难直接在自己的程序 ...
- java绘制统计直方图取平均_统计学——直方图解析 - osc_lv8qb16y的个人空间 - OSCHINA - 中文开源技术交流社区...
直方图(Histogram),又称质量分布图,是一种统计报告图, 由一系列高度不等的纵向条纹或线段表示数据分布的情况. 一般用 横轴表示数据类型,纵轴表示分布情况. 直方图是数值数据分布的精确图形表示 ...
- python获取中文字体点阵坐标_点阵汉字显示 - freecamel的个人空间 - OSCHINA - 中文开源技术交流社区...
目录: DOS下的点阵汉字 汉字的内码 汉字字模 汉字库文件 打印字库文件和HZK12 main() { unsigned char *s,*e="ABcd",*c="你 ...
- mysql连库串_数据库连接串整理 - osc_ac5z111b的个人空间 - OSCHINA - 中文开源技术交流社区...
常用JDBC驱动与连接字符串 MySQL driver:com.mysql.jdbc.Driver url:jdbc:mysql://localhost:3306/mydb MySQL url格式:j ...
- emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...
1.准备一台笔记本电脑,一根网线即可. 2.将网线一头连接笔记本电脑,另一头连接存储.(连接存储的一头应连接到有扳手图标的那一网口上) 3.配置IP地址 IP:128.221.1.254 子网掩码:2 ...
- python 白盒测试_白盒测试教程 - 颜丽的个人空间 - OSCHINA - 中文开源技术交流社区...
总共贴了39节,后续还有很长,共122节,文章名为'白盒测试教程' 1.白盒测试概念 2.测试覆盖标准 3.逻辑驱动测试 4.基本路径测试 白盒测试概念 1.白盒测试也称结构测试或逻辑驱动测试,是一种 ...
- java运动员最佳配对_运动员最佳配对问题 - osc_y1pyjby5的个人空间 - OSCHINA - 中文开源技术交流社区...
这道题可以看为排列数的一个典型模块 一.算法实现题: 1.问题描述: 羽毛球队有男女运动员各n人,给定2个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q ...
最新文章
- Dubbo管控台Windows安装
- Android版‘音乐一点通’音乐播放器详情
- 荒野乱斗角色设计浅谈
- iOS之深入探究多线程实现、线程安全和线程死锁
- 调用支付jsapl缺少参数:totalfee openid无法取得_微信支付的架构到底有多牛?
- 【CodeForces - 618A】Slime Combining(二进制,思维)
- 深入理解JAVA虚拟机学习笔记(一)JVM内存模型
- python-列表包字典-根据字典的某一个键的值来进行排序
- 如何限制访问电脑磁盘
- 3.4.1 - Numeric Types
- 王春晖:发展自主知识产权的网安核心技术迫在眉睫
- 预定义类型未定义或导入_LimeSurvey基础教程(二)——问题类型
- php小程序支付notify,PHP 小程序支付
- Linux下的Vivado安装——以Ubuntu为例
- Python实现简易TCP服务器
- lookAhead和RAdam 真香
- java json 解析字符串_java-解析JSON字符串的最简单方法
- opengl——贴图
- 抖音带货赚钱吗?有哪些技巧?
- Neo4j-简单使用
热门文章
- 【Vue.js】Vue.js组件库Element中的单选框、多选框、输入框和计数器
- 计算机知识科普策划方案,中国科普博览--中国优秀文化网站、全国优秀科普网站...
- 一个一站式流式处理云平台解决方案
- 随记随提-第一次团队会议
- 提高国内VSCode下载速度,包含deb等格式
- 2023上海国际天然食用胶产业展览会暨发展大会
- android+动态设置权重,Android自适应布局(关于权重weight的使用技巧!)
- Android进程优先级处理大全
- xposed微信红包
- NIUSHOP商城系统短信宝短信插件