2017-09-27 74 views
0

我有多个vms运行项目中的所有模块。每个由用户创建的请求都必须由所有模块处理,但只需要完成一次。因此,如果VM1接收到请求,则模块1可以部分处理该请求,但下一个VM1或VM2或群集中的任何其他VM可以接收并处理模块2。等等。负载平衡在群集中运行的Java应用程序

由于每个虚拟机的容量有限,我希望使用负载平衡器在单个虚拟机之间分配工作。

是否有负载平衡器(开放源码的Java)可以解决这个问题,或者我需要使用多个负载均衡算法(循环,加权等)来解决我的需求?

编辑1:

每个模块是Java类,这是独立于本身,但需要前面的模块其started.Each Vm的收听消息总线之前完成。当总线上出现一条消息时,任何一个虚拟机都可以拿起并开始处理它。

回答

0

您可以试试HAProxy(TCP/HTTP负载均衡),它是开源的,功能丰富且应用相当广泛。除了良好的文档,你可以找到许多可用的信息。

+0

它不是一个处理http请求的web应用程序。所以这可能没有帮助 –

+0

好的,那么通信或消息传递的模式是什么。 – Shailendra

+0

每个Vm正在收听消息总线。当总线上出现一条消息时,任何一个虚拟机都可以拿起并开始处理它。 –

0

根据您尝试并行化问题的确切语义,您可能会通过将问题分块为某些大小的“工作包”并将它们保留在中央队列中,从而获得良好结果。然后,只要每个虚拟机完成前一个数据包就轮询来自所述队列的数据包。这被称为自我调度。

+0

听起来像我需要的。你能指出我使用这种架构的某些材料吗? –

+0

我不知道实施这种方法的任何通用解决方案,对不起。这个原则通常很简单,可以推出自定义解决方案。 – Felk

+0

另外,根据您的问题和规模,拥有这样一个集中的队列可能会成为瓶颈 – Felk