Sun Java System Application Server 9.1 部署规划指南

群集中的 IIOP 负载平衡

利用 IIOP 负载平衡,可以将 IIOP 客户机请求分配到不同的服务器实例或名称服务器。目标是将负载平均分布在群集中,从而提供可伸缩性。通过结合使用 IIOP 负载平衡以及 Sun Java System Application Server 中的 EJB 群集和可用性功能,不仅可以提供负载平衡,而且还可以提供 EJB 故障转移。

当客户机对某个对象执行 JNDI 查找时,命名服务会创建一个与特定服务器实例关联的 InitialContext (IC) 对象。从此时起,使用该 IC 对象进行的所有查找请求都会发送给相同的服务器实例。使用该 InitialContext 查找的所有 EJBHome 对象都托管在相同的目标服务器上。此后获得的所有 Bean 引用也创建在相同的目标主机上。这就有效地提供了负载平衡,原因是所有客户机都在创建 InitialContext 对象时随机使用动态目标服务器的列表。如果目标服务器实例发生故障,查找或 EJB 方法调用会将故障转移到另一个服务器实例。

例如,图中显示的 ic1、ic2 和 ic3 是在 Client2 的代码中创建的三个不同 InitialContext 实例。它们将被分配到群集的三个服务器实例中。因而,此客户机创建的 Enterprise JavaBeans 便会随之分布到这三个实例中。Client1 仅创建一个 InitialContext 对象,并且来自此客户机的 Bean 引用仅位于服务器实例 1 上。如果服务器实例 2 出现故障,ic2 上的查找请求会将故障转移到另一个服务器实例(不一定是服务器实例 3)。对于服务器实例 2 上以前承载的 Bean,还会自动将对其进行的任何 Bean 方法调用重定向到另一个实例(如果此操作安全)。虽然查找故障转移是自动完成的,但 Enterprise JavaBeans 模块将仅在安全时才重试方法调用。

IIOP 负载平衡和故障转移将透明地发生。在应用程序部署过程中无需特殊的步骤。在群集中添加或删除新实例将不会更新该群集的现有客户机视图。您必须在客户端手动更新端点列表。