批量框架调研总结
之前公司用的一套自研的批量框架,每个Job都作为独立的Jvm进程执行,目前存在以下问题:
- 随着批量任务的增加,存在着高峰时间任务集中启动,资源消耗严重
- 未区分轮询批量,导致的进程频繁重启,引起多Jvm消耗额外的资源以及资源分配的问题
- 不支持批量编排
- 不支持自定义脚本任务
- 不支持任务分片
业务功能越来越多,现有框架的问题也越来越明显。于是近期对一些批量框架进行了调研,看下新的批量框架的改造方向。先上一张思维导图:
批量框架思维导图
批量处理
SpringBatch
SpringBatch是一款轻量的、全面的批处理框架,用于开发强大的日常运营的企业级批处理应用程序。SpringBatch是一个大数据量的并行处理框架。
任务调度
Crontab
crontab 命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令
Spring Task
Spring Task是Spring框架自带的任务调度器。
Quartz
Quartz是Java领域最著名的开源任务调度工具。Quartz提供了极为广泛的特性如持久化任务,集群和分布式任务等,其特点如下:
- 完全由Java写成,方便集成(Spring)
- 伸缩性
- 负载均衡
- 高可用性
Quartz应用与集群原理分析这篇文章里有比较详细的介绍
Elastic Job
Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。elastic job学习
Elastic Job Lite
Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。
Elastic Job Cloud
Elastic-Job-Cloud使用Mesos + Docker的解决方案,额外提供资源治理、应用分发以及进程隔离等服务。
关于Spring Task、Quartz和Elastic-Job的区别
- spring task用于单机,定时任务的表达式固定(因为注释的方便,但因此代码也写死了,不能在线修改表达式),定时任务执行的准时度要求不高(里面用的等待队列,有可能会到点推迟执行)。
- quartz一般适用于表达式不固定需要在线修改等等等等。task有的quartz都有。非业务类型定时任务可以使用task,业务类型请考虑使用quartz
- Elastic Job对比quartz改用Zookeeper实现集群功能,并且支持任务的弹性分片。都提供弹性分片。
xxl-job
xxl-job和elastic-job-lite对比
分布式定时任务调度系统技术选型
xxl-job 提供任务依赖、日志查看,可查看每个job id的日志、grule方式添加任务。分布式基于quartz,同样基于数据库。管理界面功能丰富
elastic-job-lite 分布式基于zookeeper,管理界面功能简单。有弹性扩容和数据分片的概念。
TBSchedule
Spring Cloud Task
Spring Cloud Task 主要解决短命微服务的任务管理,任务调度的工作,比如说某些定时任务晚上就跑一次,或者某项数据分析临时就跑几次。
Spring Cloud Data Flow
-
Data flow 是一个用于开发和执行大范围数据处理其模式包括ETL,批量运算和持续运算的统一编程模型和托管服务。
-
对于在现代运行环境中可组合的微服务程序来说,Spring Cloud data flow是一个原生云可编配的服务。使用Spring Cloud data flow,开发者可以为像数据抽取,实时分析,和数据导入/导出这种常见用例创建和编配数据通道 (data pipelines)。
-
Spring Cloud data flow 是基于原生云对 spring XD的重新设计,该项目目标是简化大数据应用的开发。Spring XD 的流处理和批处理模块的重构分别是基于 spring boot的stream 和 task/batch 的微服务程序。这些程序现在都是自动部署单元而且他们原生的支持像 Cloud Foundry、Apache YARN、Apache Mesos和Kubernetes 等现代运行环境。
-
Spring Cloud data flow 为基于微服务的分布式流处理和批处理数据通道提供了一系列模型和最佳实践。
网友评论