批处理
批处理被定义为在没有交互或中断的情况下处理有限数量的数据。实现批处理的应用程序被称为临时应用程序或短期应用程序。计费应用程序就是一个批处理过程的例子。下图显示了这样一个应用程序
此应用程序每晚运行,用于从平面文件中读取客户使用数据,为这些记录生成定价信息,并将计费信息插入到计费表中。一旦读取并定价了所有使用数据,并将结果插入到计费表中,应用程序就会停止。
这听起来很简单,但我们必须考虑如果批处理应用程序在六个小时的运行中运行了四个小时后失败,因为数据库的表空间不足,会发生什么情况。一旦添加了更多表空间,我们不希望从一开始就重新启动处理。因此,计费应用程序需要能够从停止的地方重新启动。
Spring Batch
在上一节中,我们表达了对批处理计费应用程序的最低要求。但是,在我们开始编写可重启特性、读取器和写入器的代码之前,我们应该先了解一下 Spring Batch。Spring Batch 提供了在处理大量记录时必不可少的功能,包括日志记录和跟踪、事务管理、作业处理统计信息、作业重启、跳过和资源管理。Spring Batch 能够处理 Batch Job
的可重启性,并提供了 FlatFileItemReader
和 JdbcBatchItemWriter
,因此我们不需要编写样板代码。这样,我们就可以专注于对使用数据进行定价的业务逻辑。
在云中运行批处理应用程序
现在我们已经了解了 Spring Batch 如何简化编写批处理应用程序的过程,但是如何在云中运行批处理应用程序呢?Cloud Foundry 和 Kubernetes 都支持在其平台上运行临时(短暂)应用程序的概念。Cloud Foundry 将临时应用程序称为任务,而 Kubernetes 将其称为作业。但是要在云中运行临时应用程序,我们需要具备一些基本功能
- 记录应用程序的启动和停止时间。
- 记录应用程序的退出代码。
- 记录应用程序返回的退出消息或错误消息。
- 能够防止应用程序在已在运行时再次运行。
- 能够通知其他应用程序该应用程序已到达处理的某些阶段。
这听起来工作量很大,但 Spring Cloud Task 可以为您完成所有这些工作,甚至更多。Spring Cloud Task 允许您在本地或云中开发和运行短暂的微服务。您只需添加 @EnableTask
注解即可。
编排批处理应用程序
下图显示了 Data Flow Server 如何管理多个云中的多个应用程序
使用 Spring Batch 和 Spring Cloud Task 编写批处理应用程序后,如何编排应用程序的启动呢?Spring Cloud Data Flow 可以帮助您。Spring Cloud Data Flow 允许您通过临时请求或批处理作业调度程序启动批处理应用程序。此外,您还可以在以下平台上启动批处理应用程序
- Cloud Foundry
- Kubernetes
- 本地服务器
Spring Cloud Data Flow 允许您通过 UI、RESTful API 或 Spring Cloud Data Flow Shell 启动或安排启动批处理应用程序。
后续步骤
如果您有兴趣使用预构建的应用程序来创建批处理数据管道,请参阅批处理入门指南。
如果您有兴趣编写和部署您的第一个自定义批处理应用程序,请参阅批处理开发者指南。