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开源项目的10项特性
[强烈推荐-写的很好]新一代分布式任务调度框架:当当elastic-job开源项目的10项特性
参考URL: https://blog.51cto.com/14409778/2422455
elastic-job与quartz集群对比
其实quartz的缺点,就是elastic-job优化弥补的点。
quartz缺点:
-
同一个任务只能有一个节点运行,其他节点将不执行任务,性能低,资源浪费
-
当碰到大量短任务时,各个节点频繁的竞争数据库锁,节点越多这种情况越严重。性能会很低下
-
quartz 的分布式仅解决了集群高可用的问题,并没有解决任务分片的问题,不能实现水平扩展
网上一些信息:
elastic-job替换掉原来的spring+quartz的定时任务调度
参考URL: https://blog.csdn.net/gaoshili001/article/details/79126053
我想用quartz实现定时任务集群的时候,遇到过很坑的问题就是所有做集群的机器都必须保证时间的一致性,要不然有很多机器的项目是起不来的;除此之外,使用quartz很容易造成数据库死锁的问题,虽然我已经降低了quartz的数据库事务级别,但还是有这种情况发生,所以用过一段时间之后,新的项目就用了elastic-job。
总结: 虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行执行作业的功能。
Elastic-Job运维监控
分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)
参考URL: http://www.imooc.com/article/274236