负载平衡群集中运行的Java应用程序

时间:2017-09-27 11:45:26

标签: java load-balancing

我有多个vms运行项目中的所有模块。用户创建的每个请求都必须由所有模块处理,但只需要执行一次。因此,如果VM1接收请求,则module1可以部分处理请求,下一个VM1或VM2或群集中的任何其他VM可以接收并处理module2。等等。

由于每个VM容量有限,我想使用负载均衡器在各个VM之间分配工作。

是否有可用的负载均衡器(java的开源)可以解决这个问题,还是需要使用多个负载均衡算法(循环法,加权等)来实现它来解决我的需求?

编辑1:

每个模块都是一个java类,它本身是独立的,但需要在它启动之前完成之前的模块。每个Vm都在监听消息总线。当总线上出现一条消息时,任何一个虚拟机都可以拿起它并开始处理它。

2 个答案:

答案 0 :(得分:0)

您可以尝试HAProxy(TCP / HTTP loadbalancer),它是开源的,功能丰富且使用非常广泛。除了良好的文档,您还可以找到许多可用的信息。

答案 1 :(得分:0)

根据您尝试并行化的问题的确切语义,您可以通过将问题分解为"工作数据包来获得良好的结果。一些大小并将它们保持在中央队列中。然后,让每个VM在完成前一个数据包后立即轮询来自所述队列的数据包。这称为自我调度。