【问题标题】:Making Existing Spring Batch Application run on multiple nodes使现有的 Spring Batch 应用程序在多个节点上运行
【发布时间】:2013-09-16 10:14:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您并没有真正描述您的用例。 “在多个节点上运行”并不是一个很好的描述,请解释您想要扩展的内容。它可能是一步处理,运行并发作业的可能性或类似的东西......

标签: java spring scalability spring-batch


【解决方案1】:

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

当一个步骤中的处理器是瓶颈时,使用远程分块。在这种情况下,主节点读取输入并通过 Spring Integration 通道将其发送到远程节点进行处理。处理完项目后,将结果返回给 master 进行写入。在这种情况下,读和写是在本地完成的。虽然这有助于并行处理,但它需要 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 集成的演讲:该演讲在 SpringOne2GX 2013 上发表,包含许多示例:https://github.com/ghillert/spring-batch-integration-sample

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

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 2017-04-20
    • 2018-09-04
    • 2017-06-24
    • 2020-07-31
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多