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使用Mesosdocker(TBD )解决方案添加资源管理、APP应用程序分发和进程隔离等服务
突出显示:
它基于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版开发,改进了一些功能,并添加了新的功能。
突出显示:
支持python、Go、shell、Java和Php的多语言开发。
进一步完善了管理控制台和数据的统计分析
缺点:
技术文件较少,该框架是2016年唯品会研发团队基于elastic-job开发的
opencron
功能齐全、真正通用的linux日程管理系统,能够应对多种场景下各种复杂的日程管理任务调度,同时集成linux实时监控、webssh,轻松管理日程管理任务的平台
缺点:只支持技能任务、现场执行、任务执行状态查询等,主要功能侧重于任务修改和查询。 不能动态添加任务和任务片。
antares
好处:
一个任务仅调度在服务器群集中的一个节点上。 调度机制基于成熟的quartz并行运行,用户可以通过预切片任务来有效提高任务的执行效率和灵活地扩展故障转移
容,在任务运行时,可以动态的加机器友好的管理控制台缺点:
不能动态的添加任务,仅能在控制台对任务进行触发,暂停,删除等操作文档不多,开源社区不够活跃系统架构图如下:
4. 比较
此处列出了几个代表性的开源产品
feature
quartz
elastic-job-cloud
xxl-job
antares
opencron
依赖mysqljdk1.7+, zookeeper 3.4.6+ ,maven3.0.4+ ,mesosmysql ,jdk1.7+ , maven3.0+jdk 1.7+ , redis , zookeeperjdk1.7+ , Tomcat8.0+HA多节点部署,通过竞争数据库锁来保证只有一个节点执行任务通过zookeeper的注册与发现,可以动态的添加服务器。 支持水平扩容集群部署集群部署—任务分片—支持支持支持—文档完善完善完善完善文档略少文档略少管理界面无支持支持支持支持难易程度简单较复杂简单一般一般公司OpenSymphony当当网个人个人个人高级功能—弹性扩容,多种作业模式,失效转移,运行状态收集,多线程处理数据,幂等性,容错处理,spring命名空间支持弹性扩容,分片广播,故障转移,Rolling实时日志,GLUE(支持在线编辑代码,免发布),任务进度监控,任务依赖,数据加密,邮件报警,运行报表,国际化任务分片, 失效转移,弹性扩容 ,时间规则支持quartz和crontab ,kill任务, 现场执行,查询任务运行状态缺点没有管理界面,以及不支持任务分片等。不适用于分布式场景需要引入zookeeper , mesos, 增加系统复杂度, 学习成本较高调度中心通过获取 DB锁来保证集群中执行任务的唯一性, 如果短任务很多,随着调度中心集群数量增加,那么数据库的锁竞争会比较厉害,性能不好。不支持动态添加任务不适用于分布式场景使用企业大众化产品,对分布式调度要求不高的公司大面积使用36氪,当当网,国美,金柚网,联想,唯品会,亚信,平安,猪八戒大众点评,运满满,优信二手车,拍拍贷——
sharedCode源码交流群,欢迎喜欢阅读源码的朋友加群,添加下面的微信, 备注”加群“ 。