如何使用 Spring Cloud Task 动态部署独立 Spring 批处理

How to dynamic deploy for standalone Spring batch using Spring Cloud Task

我们计划淘汰现有的遗留 java 批处理应用程序,并使用最新的可用批处理框架重新创建它。 鉴于我们有大量批处理作业需要现代化,我们正在寻找一种框架或架构,让我们

  1. 开发一个批处理解决方案,使我们能够在创建新批处理时动态部署它们,而不会干扰现有已部署的应用程序。 - Spring 云任务是否提供任何此功能。注意:我们只是希望将应用程序部署到我们的本地服务器,与云无关。
  2. 如果 Spring Batch/Boot 可以为我们提供我们通常期望从批处理应用程序获得的功能,那么 Spring Cloud Task 的特殊附加值是什么? - 我无法从在线提供的 Spring 文档中完全理解这一点。
  3. 从 Spring Cloud Task 的文档中,我了解到它允许一个应用程序在其中包含许多任务。如果每个任务都有自己的库依赖,这可能与其他任务的依赖冲突,我该怎么办?那么在那种情况下,这些任务中的每一个都应该转移到一个新的应用程序中,还是应该有解决办法?

回答您的问题:

  1. Spring Cloud Task 是否处理编排 - 否。Spring Cloud Task 不处理任务或作业的编排。这个生态系统中处理 deployment/orchestration 任务或工作的组件实际上是 Spring 云数据流(这就是为什么我问你是否使用任何类型的云平台,包括 YARN、Cloud Foundry、Kubernetes 或Mesos...Spring Cloud Data Flow 支持的环境)。
  2. Spring Cloud Task 比 Spring Boot/Spring Batch - Spring Cloud Task 提供什么附加值旨在提供一些东西:
    1. 在状态管理方面与 Spring 批处理类似的功能,无需创建批处理作业。当 运行 在云环境中启动一个 Boot 应用程序时,没有从一个环境到另一个环境获取结果的标准方法(YARN 处理作业结果的方式不同于 Cloud Foundry 上的任务,而 Cloud Foundry 上的任务又不同于 Kubernetes 上的作业,等等)。 Spring Batch 提供了这一点,但现在所有短暂的进程都需要 Batch 的开销 API 因此 Spring Cloud Task 为这些用例提供了更轻松的接触。
    2. 自动添加信息侦听器。使用 Spring XD,当您 运行 XD 容器中的作业时,XD 容器会自动添加一些广播您可以收听的事件的信息监听器。 Spring Cloud Task 无需 XD 容器即可提供相同的功能。
    3. 与 Spring Cloud Stream 的集成。 Spring Cloud Task 提供了从从 Spring Cloud Stream 收到的消息启动任务的能力。此外,前面提到的信息性消息(批处理事件和任务事件)都是通过 Spring Cloud Stream 频道发送的。
    4. DeployerPartitionHandler. 在云环境中工作时,此 PartitionHandler 实现允许您将工作程序作为任务启动分区批处理作业。这允许分区批处理作业的动态扩展,而不是传统的预部署工作人员监听工作的选项,这在现代云环境中会浪费资源。
  3. 多个任务的打包如何与依赖一起工作- 总之,不推荐这样做。 Spring Cloud Task 的想法是 Spring Boot 应用程序的执行就是任务。虽然您可以打包多个任务并使用不同的方法,让它们根据不同的刺激执行,但这违背了正确使用 Spring Cloud Task 所必需的 12 因素应用程序概念。

我的两毛钱
对于现代批处理平台的最佳选择,您确实需要首先研究平台的某些部分,并且从 Cloud Foundry/Kubernetes/Mesos/YARN 层开始。否则,您最终将自己构建大部分基础设施。这就是 Spring XD 演变为 Spring 云数据流的原因。 Spring XD 容器中增加的复杂性通过要求现代平台 运行 on 来消除(因为它们都自己处理这些 gua运行 tees)。如果没有这一部分,您将花费大量时间来管理大多数现代平台为您处理的应用程序的部署和编排。

从那里开始,选择变得非常简单恕我直言,Spring Cloud Task 用于简单任务,Spring Batch 用于批处理作业,Spring Cloud Data Flow 用于编排。