任务和调度:理解批量处理的关键设计

批量处理在无人工干预的情况下处理批量输入数据,适用于数据量大、实时性要求不高的场景。本文探讨了批量处理的关键设计,包括SpringBatch的批量任务设计模式和TBSchedule的调度设计,分析了两种调度模式的优缺点,强调了良好架构设计在批量处理系统中的重要性。
摘要由CSDN通过智能技术生成

一、背景

1.1.什么是批量处理

维基百科给批量处理的定义是指在没有人工干预的情况下,由一个计算机程序基于一份批量的输入执行一系列的任务的一种处理模式。这句话可能有点拗口,简单来说,批量处理是一种处理模式,这种模式在进行数据处理时,输入数据一般包含多条,处理过程中一般没有人工交互。而另一种主流的处理模式,联机处理与批量处理的最主要区别就是,联机处理中一般一条输入数据就产生一次处理过程,然后直接将结果反馈给调用方。批量处理曾经在早期的计算机处理模式中占据统治地位。

1.2.批量处理拥有广泛的使用场景

我们先来看下批量处理的特点:

批量处理单次执行就可以处理大量数据,而联机处理中单次执行一般只能处理少量数据。

批量处理每次需要处理大量的数据,执行时间将较长,而联机系统需要实时、快速响应调用方的请求。

批量处理不需要维持与调用方的连接,执行结果一般通过报告等形式通知调用方,资源利用率比较高。

批量处理可以选择将处理时间放在计算资源不那么紧张的时间段,更好的利用系统资源。

从批量处理的特点我们可以看到,在实时性、交互性要求不高,同时待处理的数据量比较大的场景下,就可以考虑使用批量处理的模式。而实际各种业务系统中通常都会存在大量适合使用或者正在使用批量处理的场景,常见的如银行的对账、网银的批量待发工资、日志系统中批量备份日志等。我们大家可能都会有从支付宝里提现至银行卡的经历,通常提现并不是实时的,支付宝会给你一个deadline,这中间支付宝与银行之间数据对账就是采用批量处理完成的。

1.3.批量处理需要良好的架构设计

在最简单的批量处理场景下,我们可以通过编写脚本,在类Unix系统中通过cron程序定时启动执行。但是这种模式仅仅适合单机处理的情况,没有分布式处理的能力,同时也没有办法进行统一的监控管理。在实际使用时,可能同时存在数量巨大的批量任务,如何管理与调度这些任务将是个巨大的挑战。设计良好的批量处理框架可以简化批量任务开发过程,减少配置时间,提高整体稳定性。笔者曾经参与过某银行BPM系统批量处理框架的设计,一开始设计比较简单,在各个服务器部署批量脚本,基于cron执行,通过数据库进行结果统计,在项目上线初始阶段,由于批量任务比较少,所做的工作也比较简单,该设计能够基本满足需求,但是随着项目上线后,批量任务越来越多,场景越来越复杂(比如需要支持数据库服务器HA切换时批量任务不重复执行),原有设计已经越来越力不从心,最后只有推倒重新设计,费时又费力,由此可见一个好的批量处理框架设计是多么的重要。本文将通过分析批量处理中的两个关键环节,结合一些开源的批量处理框架,来聊一聊如何更好地进行批量处理型架构的设计。

二、批量处理中的关键设计

批量处理中两个关键环节是批量任务设计和任务调度设计:

批量任务设计:统一规定了作业的定义、编排、执行等过程,良好的作业

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值