Elastic-Job-Lite并没有宿主程序,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。它的开发也比较简单,引用Jar包实现一些方法即可,最后编译成Jar包运行。
Elastic-Job-Lite的分布式部署全靠ZooKeeper来同步状态和原数据。实现高可用的任务只需将分片总数设置为1,并把开发的Jar包部署于多个服务器上执行,任务将会以1主N从的方式执行。一旦本次执行任务的服务器崩溃,其他执行任务的服务器将会在下次作业启动时选择一个替补执行。如果开启了失效转移,那么功能效果更好,可以保证在本次作业执行时崩溃,备机之一立即启动替补执行。
Elastic-Job-Lite的任务分片也是通过ZooKeeper来实现,Elastic-Job并不直接提供数据处理的功能,框架只会将分片项分配至各个运行中的作业服务器,开发者需要自行处理分片项与真实数据的对应关系。框架也预置了一些分片策略:平均分配算法策略,作业名哈希值奇偶数算法策略,轮转分片策略。同时也提供了自定义分片策略的接口。
Elastic-Job-Lite还提供了一个任务监控和管理界面:Elastic-Job-Lite-Console。它和Elastic-Job-Lite是两个完全不关联的应用程序,使用ZooKeeper来交换数据,管理人员可以通过这个界面查看、监控和管理Elastic-Job-Lite的任务,必要的时候还能手动触发任务。
关注的是数据,增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。但是学习成本相对高些,推荐在“数据量庞大,且部署服务器数量较多”时使用。
Staturn
Saturn是唯品会在github开源的一款分布式任务调度产品。它是基于当当elastic-job来开发的,其上完善了一些功能和添加了一些新的feature。Saturn的任务可以用多种语言开发比如python、Go、Shell、Java、Php。其在唯品会内部已经发部署800+个节点,每日10亿级别的调度考验。
Saturn集成了Elastic-Job-Lite优点的基础上,在Elastic-Job停更后(一年多没有更新维护),管理和统计也是它的亮点,同时版本更新比较快也是其一大亮点,具体支持详情如下:
支持基于事件和时间触发
支持多种语言作业,语言无关(Java/Go/C++/PHP/Python/Ruby/shell)
支持秒级调度
支持作业分片并行执行
支持依赖作业串行执行
支持作业高可用和智能负载均衡
支持异常检测和自动失败转移
支持异地容灾
支持多个集群部署
支持跨机房区域部署
支持弹性动态扩容
支持优先级和权重设置
支持docker容器,容器化友好
支持cron时间表达式
支持多个时间段暂停执行控制
支持超时告警和超时强杀控制
支持灰度发布
支持异常、超时和无法高可用作业监控告警和简易的故障排除
支持失败率最高、最活跃和负荷最重的各域各节点TOP10的作业统计
经受住唯品会生产800多个节点,每日10亿级别的调度考验
支持简单的DAG任务和依赖任务
可视化管理
结论:
结合以上三种分布式定时任务调度系统的比对,在社区活跃和功能覆盖来说,xxl-job和Saturn 比较适合目前系统的技术选型架构,其中xxl-job文档详细,入门简单,不涉及zookeeper,相对来说学习成本低,但是性能瓶颈集中于DB,目前xxl-job项目组计划替换Quartz崃解决目前存在的系统瓶颈,而反观Saturn在集成了Elastic-job的优点的前提下,补齐了管理和统计的短板,修复了历史存留的问题,并有明确的发展计划,已经成为集管理、调度、任务分配、监控预警为一体的综合调度系统,所以更适合目前大部分系统现状。