5

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

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

1 回答 1

12

要回答您的问题:

  1. Spring Cloud Task 是否处理编排 -否。Spring Cloud Task 不处理任务或作业的编排。这个生态系统中处理任务或作业的部署/编排的组件实际上是 Spring Cloud Data Flow(这就是为什么我问你是否使用任何类型的云平台,包括 YARN、Cloud Foundry、Kubernetes 或 Mesos……环境Spring Cloud 数据流支持)。
  2. Spring Cloud Task 通过 Spring Boot/Spring Batch 提供了哪些附加值 - Spring Cloud Task 旨在提供一些东西:
    1. 在状态管理方面与 Spring Batch 类似的功能,无需创建批处理作业。在云环境中运行 Boot 应用程序时,没有标准的方法来获取不同环境的结果(YARN 处理作业结果的方式与 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 应用程序的执行是 Task。虽然您可以打包多个任务并使用不同的方法,但让它们根据不同的刺激执行,这与正确使用 Spring Cloud Task 必不可少的 12 因素应用程序概念背道而驰。

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

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

于 2016-07-20T15:30:06.003 回答