【问题标题】:Spring Batch Parallel Job ScalingSpring Batch 并行作业扩展
【发布时间】:2012-07-20 21:01:23
【问题描述】:

我目前正在开发 Spring Batch POC,并且对大部分实际 Spring Batch 功能都有很好的掌握。我目前有一个程序,它使用 Spring Integration 接收 HttpRequest 并使用消息通道最终将作业执行发送到队列中的作业启动器。我们真正想做的是在作业启动器之前实现某种“调度程序/负载平衡器”(不太确定如何称呼它),它将查看当前运行的工作节点和输入文件的大小并生成决定应该允许多少工作节点。我们可能还希望能够在作业运行时更改作业节点的数量,以允许更多作业运行。

我们的想法是,我们将运行一个可以随时接受许多作业请求的服务器,以及将作业分区到的大型机器集群。我们希望能够水平扩展,因此只要服务器不忙,它就可以充分利用硬件,并且能够确保小型作业不会经常被大型作业阻塞。

从我的研究看来,我们似乎必须实现另一个框架才能做到这一点(GridGain 和 Hadoop 是否允许这样做?),但我想我会问一下人们建议做这样的事情,如果有一种方法可以在不实现另一个大型框架的情况下做到这一点。

抱歉,如果有任何不清楚或令人困惑的地方,我只是一个低级的实习生,上个月开始学习 Spring 和 Spring Batch,我还远未完全理解所有内容,尤其是这些扩展的东西。只要问,我会尽力解决问题。

感谢您的帮助!

【问题讨论】:

    标签: spring scalability spring-batch spring-integration


    【解决方案1】:

    看看spring-batch-admin伞形项目https://github.com/SpringSource/spring-batch-admin下的'spring-batch-integration'项目

    它有许多使用 spring-integration 将工作分配到其他节点的示例。特别是查看块和分区包。只需使用 jms 通道适配器替换 spring 集成通道。通过 JMS 分配工作分区,您可以根据需要横向扩展工作节点的数量。

    spring 集成论坛中有很多关于这个主题的主题;搜索“PartitionHandler”。

    希望对您有所帮助。

    【讨论】:

    • 我实际上设置了一个分区处理程序,尽管它目前只是将步骤分配给本地线程。更改它以分发到工作节点不需要太多。我只是不确定如何获取有关当前正在运行的工作节点数量的信息以及如何处理所有节点都被使用并且新作业被放入队列的情况,我想减少工作人员的数量作业正在使用的节点,因此可以运行另一个作业。这可能仅使用 JMS 和 spring-batch-integration 吗?我对这个框架很陌生,所以我并不真正了解所有功能。
    • 您可以使用许多工具。您可以使用 发送控制消息以启动/停止每个节点上的入站端点 - 例如。 “@adapter.stop()”。这使您可以控制特定队列上的消费者数量。可以通过查询 JobRepository 来获取每个分区的 step 执行状态的当前状态;它不会立即为您提供有关它在哪个节点上运行的信息,但您可以将该信息添加到上下文中。
    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 2014-10-15
    • 2019-06-09
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多