是否可以在分布式环境中将RMI与循环负载均衡器一起使用?

时间:2017-02-10 03:15:05

标签: java cloud load-balancing rmi round-robin

RMI是一种使用JRMP protocol的Java网络编程API。如果我们使用Wireshark分析数据包,则表明在建立客户端和服务器之间的通信之前,JRMP协议至少需要2次请求交换。

更多细节:第一个请求交换是协商步骤,第二个请求交换是lookup()步骤,然后其他请求交换是远程过程调用(当我们使用来自我们类的方法扩展{{ 3}})。第一个远程过程调用包含序列化类的属性名称,如果第二次调用相同的方法,则会有一些优化(integer id将用于每个属性名称而不是{{1} })。

不太详细:JRMP很复杂,因为它需要多个客户端/服务器请求交换。像HTTP这样的协议只需要一个。

考虑到我们正在开发云,我们有多个节点和RMI服务器,我们在RMI客户端和云之间也有一个循环负载均衡器。 RMI客户端发送协商请求,第一个节点接收它,然后负载均衡器将String请求发送给第二个节点......是否可以在分布式环境中使用RMI?

1 个答案:

答案 0 :(得分:1)

  

第一个请求交换是协商步骤,第二个请求交换是lookup()步骤

正确,但这只需要在客户端应用程序的生命周期中发生一次,而不是每次远程方法调用。

  

RMI客户端发送协商请求,第一个节点收到它,然后负载均衡器将lookup()请求发送给第二个节点...

不可能。这两个请求都通过相同的TCP连接 ergo 传输到同一个目标主机。

  

然后其他请求交换是远程过程调用(当我们使用扩展Remote的类中的方法时)。

不一定。对目标对象的请求可以通过不同的连接进行, ergo 它们可以包含另一个协商步骤。无论是否存在负载均衡器,它们也可以从第一个目标主机转到不同的主机。

  

是否可以在分布式环境中使用RMI?

您必须将您的注册表和所有远程对象复制到所有负载平衡的主机,如果远程对象具有会话相互依赖性,您可能会陷入困境。

使用RMI / IIOP和负载均衡ORB可能会更好。