使现有的Spring Batch Application在多个节点上运行

时间:2013-09-16 10:14:10

标签: java spring scalability spring-batch

我们已经存在Spring Batch Application,我们希望它可以在多个节点上运行。

Spring Batch的scalabilty文档涉及代码更改和配置更改。

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

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

这实际上取决于你的情况。具体来说,为什么你想在多个节点上运行吗?你试图克服的瓶颈是什么? Spring Batch为在多个节点上进行扩展而开箱即用的典型两种方案是远程分块和远程分区。两者都是主/从配置,但每个都有不同的用例。

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

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

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

  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
  4. 在任何这些情况下,远程分块都应该可以通过零新类来完成。远程分区通常要求您实现一个新类(分区程序)。