批处理是企业级业务系统不可或缺的一部分,spring batch是一个轻量级的综合性批处理框架,可用于开发企业信息系统中那些至关重要的数据批量处理业务。
目录
背景
思路
组件图
部分时序图
技术选型
背景
随着微服务化的系统越来越多,平台中有些耗时大批量的操作,比如:导入导出等问题暴露的越来越严重。老版本的解决方案(异步排队):这些功能和系统集成在一起,通过类似请求漏斗原理(线性排队执行),UI上有个结果页面(自动刷新)获取最终执行结果。
业务反馈:tms、oms有各自的导入导出“执行结果”,体验不好
系统设计上:
Ø 性能特别差,尽管采用定时任务排队执行解决,但时不时宕机;
Ø 系统资源浪费,并发一高时排队时间较长;
Ø 需要针对这些请求配置nginx转发,增加了运维复杂度;
Ø 对于大批量生成汇总类需求无力响应(需转发至报表,但有时候不是所有业务数据都希望被报表抽取);
Ø 微服务后,特别是DB拆分后不得不采用原来方案(集成,配置繁琐),上述问题更突出;
思路
独立出一个新系统(批处理服务引擎),进行数据的集中化管理,那它可以做什么?
Ø 性能好,支持一定数据的并发
Ø 能够对大批量数据进行抽取,分析处理,输出(目前定位在导入导出)
Ø 可以管理多个数据源,同时支持不同数据源之间的同步(随着微服务越来越多这个不可少,接口毕竟解决不了这些问题)
Ø 集中化需考虑业务侵入性,原来应用的逻辑需迁移到新系统,需维护两处逻辑?需求是否多变?此处很关键
最终考虑使用spring-batch。
组件图
最终妥协下来选择了方案2,但未来要向方案1的方向孵化。
模块依赖描述
部分时序图
技术选型
* spring-boot 1.5.4.RELEASE
* mybatis-spring-boot 1.3.0
* poi、poi-ooxml 3.15
最后,如需更深入的了解可以看下篇《spring-batch实践篇》
标签:批处理,spring,排队,batch,大批量,导入,预研 From: https://blog.51cto.com/alex/6143455