9

我们有现有的 Spring Batch 应用程序,我们希望使其可扩展以在多个节点上运行。

Spring Batch 的可扩展性文档涉及代码更改和配置更改。

我只是想知道这是否可以仅通过配置更改来实现(添加新类并将其连接到配置中很好,但只是想避免对现有类进行代码更改)。

非常感谢您提前提供的帮助。

4

1 回答 1

7

这真的取决于你的情况。具体来说,为什么要在多个节点上运行?您试图克服的瓶颈是什么?Spring Batch 开箱即用地处理跨多个节点扩展的典型两种场景是远程分块和远程分区。两者都是主/从配置,但每个都有不同的用例。

当一个步骤中的处理器是瓶颈时,使用远程分块。在这种情况下,主节点读取输入并通过 Spring Integration 通道将其发送到远程节点进行处理。处理完项目后,将结果返回给主设备进行写入。在这种情况下,读和写是在本地完成的。虽然这有助于并行处理,但它需要 I/O 命中,因为每个项目都是通过网络发送的(并且需要保证交付,例如 JMS)。

远程分区是另一种情况。在这种情况下,主机为每个从机生成要处理的输入的描述,并且只有该描述通过线路发送。例如,如果您正在处理数据库中的记录,则主服务器可能会向每个从服务器(1-100、101-200 等)发送一系列行 ID。读取和写入发生在从站本地,不需要保证交付(尽管在某些情况下很有用)。

根据您的用例,这两个选项都可以使用最少(或没有)新类来完成。有几个不同的地方可以查找有关这些功能的信息:

  1. Spring Batch Integration Github 存储库 - Spring Batch Integration 是支持上述用例的项目。您可以在这里阅读更多相关信息:https ://github.com/spring-projects/spring-batch-admin/tree/master/spring-batch-integration
  2. 我的远程分区示例 - 本演讲介绍了远程分区并提供了在 CloudFoundry 上运行的工作示例(目前仅适用于 CF v1,但 CF2 的更新将在几天后推出)。配置几乎相同,只是 Rabbit 的连接池不同:https ://github.com/mminella/Spring-Batch-Talk-2.0此演示文稿的视频可以在 YouTube 上找到:http://www .youtube.com/watch?v=CYTj5YT7CZU
  3. Gunnar Hillert 关于 Spring Batch 和 Spring Integration 的演讲:该演讲在 SpringOne2GX 2013 上发表,包含许多示例:https ://github.com/ghillert/spring-batch-integration-sample

在任何这些情况下,远程分块应该可以用零个新类来完成。远程分区通常需要您实现一个新类(Partitioner)。

于 2013-09-16T21:41:08.757 回答