Spring Batch和Pivotal Cloud Foundry

时间:2016-02-19 16:34:34

标签: spring-batch

我们正在评估Spring Batch框架以替换我们组织中的本地批处理框架,我们应该能够在Pivotal Cloud Foundry(PCF)中部署该批处理。在这方面,您能否告诉我们您对以下问题的看法:

  • 让我们说如果我们使用远程分区策略来处理大量记录,批处理作业是否可以根据批处理作业处理的数量自动缩放云中的从属节点?或者我们必须缩放适当数量的Slave节点并在批处理作业开始之前将它们保留在原位?
  • "网格大小"上面的场景中的参数配置?

1 个答案:

答案 0 :(得分:8)

这里有几个问题。但是,在进入它们之前,让我花点时间了解PCF上批处理的位置,然后回答您的问题。

CF的当前状态

从PCF 1.6开始,Diego(CF中的动态运行时)提供了一个名为Tasks的新原语。传统上,在CF上运行的所有应用程序都应该是长时间运行的进程。因此,为了在CF上运行批处理作业,您需要将其打包为长时间运行的进程(通常是Web应用程序),然后进行部署。如果你想使用远程分区,你需要按照你认为合适的方式部署和扩展奴隶,但它只是CF的外部。使用Tasks,Diego现在支持短期流程...也就是说,当它们完成时不会重新启动的流程。这意味着您可以作为SpringBootüberjar运行批处理作业,一旦完成,CF将不会尝试重新启动它(这是一件好事)。 1.6的问题在于,暴露任务的API不可用,因此它只是一个内部构造。

使用PCF 1.7,正在发布一个新的API以公开任务以供一般使用。作为v3 API的一部分,您将能够将自己的应用程序部署为任务。这允许您启动批处理作业作为任务,知道它将执行,然后由PCF清理。考虑到这一点......

批处理作业是否可以根据批处理作业处理的数量自动缩放云中的从属节点?

使用Spring Batch的分区功能时,有两个关键组件。 PartitionerPartitionHandlerPartitioner负责理解数据以及如何分割数据。 PartitionHandler负责了解将分区分发给从属服务器的结构。

对于Spring Cloud Data Flow,我们计划创建一个PartitionHandler实现,允许用户将从属分区作为CF上的任务执行。从本质上讲,我们期望的是PartitionHandler会将奴隶作为任务启动,一旦完成,它们就会被清除。

此方法允许根据分区数量(可配置为最大值)动态启动从属数量。

我们计划为Spring Cloud Data Flow做这项工作,但PartitionHandler也应该适用于该工作流程之外的用户。

上述方案中的“网格大小”参数配置如何?

网格大小参数实际上由Partitioner而不是PartitionHandler使用,旨在暗示可能有多少工作人员。在这种情况下,它可以用于配置您要创建的分区数,但这实际上取决于Partitioner实现。

结论

这是对CF上的批处理工作流程的描述。重要的是要注意CF 1.7在写这个答案时并没有出来。它计划在2016年第一季度结束,届时,此功能将在不久之后推出。