2012-07-20 114 views
2

我目前正在研究Spring批次POC,并且在大多数实际的Spring批量特性上都有相当不错的句柄。我目前有一个程序使用Spring Integration来接收HttpRequest并使用消息通道最终将作业执行发送到队列中的作业启动器。我们真正想要做的是在作业启动器之前实现某种“调度程序/负载平衡器”(不太清楚应该调用它),它将查看当前正在运行的工作节点以及输入文件的大小并使其决定应该允许多少工人节点工作。我们可能也希望能够更改作业在运行时的工作节点数量,以允许运行更多作业。弹簧批量并行作业缩放

我们的想法是,我们有一台运行中的服务器,可以随时接受许多作业请求,还有一大群作业将被分区的机器。我们希望能够水平扩展,所以无论服务器不忙,它都可以充分利用硬件,并且能够确保小型作业不会被大型作业不断阻塞。

从我的研究看来,我们似乎需要实现另一个框架来做到这一点(GridGain和Hadoop是否允许这样做?),但我想要看看人们推荐做这样的事情,如果没有实现另一个大型框架的方法就行。

对不起,如果有什么不清楚或困惑,我只是一个低级实习生,上个月开始学习Spring和Spring批处理,而且我还没有完全理解所有东西,特别是这个缩放的东西。只要问一下,我会尽力澄清事情。

感谢您的帮助!

回答

1

看看弹簧批次管理总体项目https://github.com/SpringSource/spring-batch-admin

它有一些使用Spring的集成工作分配至其它节点的实例下的“弹簧批一体化”项目。尤其要看大块和分区包。只需用jms通道适配器交换弹簧集成通道即可。通过通过JMS分配工作分区,您可以根据需要扩展工作节点的数量。

春季整合论坛上有关于此主题的多个主题;搜索'PartitionHandler'。

希望有所帮助。

+0

我实际上有一个分区处理程序设置,虽然它只是将步骤分发给本地线程。将它改为分发给工作节点并不需要太多的工作。我只是不确定如何获得有关当前有多少工作节点正在运行的信息,以及如何处理所有节点正在使用并将新工作放入队列中的情况,并且我希望减少工作人员的数量一个作业正在使用的节点可以运行另一个作业。这可能只是使用JMS和弹簧批量集成?我对这个框架非常陌生,以至于我不了解所有的功能。 – UnInvincible 2012-07-21 02:56:45

+0

有很多工具可供您使用。您可以使用发送控制消息来启动/停止每个节点上的入站端点,例如。 “@ adapter.stop()”。这使您可以控制特定队列上的使用者数量。您可以查询JobRepository以获取每个分区的步骤执行状态的当前状态;它不会为您提供关于运行哪个节点的信息,但您可以将该信息添加到上下文中。 – 2012-07-21 11:59:52