我正在参与开发基于 RMI 的分布式解决方案,并部署在多个 Weblogic 10gR3 (10.3.0.0) 节点上。其中一个节点托管 RMI 服务器,其他节点通过外部 JNDI 提供程序访问它。在尝试通过添加额外的 RMI 服务器来改进我们的基础架构时,我们遇到了一些问题。
我们基础架构的详细信息:
-RMI 服务器在托管服务器上运行,端口为 7005。-
RMI 客户端通过远程 JNDI 提供程序访问它,该提供程序指向以下内容:t3://hostname:7005
我发布了迄今为止我们在创建额外的 RMI 服务器时所做的尝试,以及为什么它不起作用:
1) 使用 Amazon ELB --> 这不是一个选项,因为它需要向整个 Internet 开放我们的运行时端口 (7005),这显然是一个安全漏洞。
2) 配置多端点 JNDI 提供程序(类似于:t3://hostname1:7005,hostname2:7005),这显然适用于 JMS 队列 --> 所有请求都被定向到在 hostname1 上运行的 RMI 服务器,并且该应用程序实际上运行良好。但是,当故意使 hostname1 后面的服务器崩溃时,没有请求被定向到 hostname2。(他们应该被重定向吗?)
3) 使用软件负载均衡器,例如 HAproxy --> 在通过 HTTP 层进行均衡时,请求被解释为“t3 10.3.0.0”,从而导致 HAproxy 上出现 HTTP 502 错误。在 TCP 层进行平衡时,我们遇到了几个“丢失对象”错误,好像单个 TCP 连接正在用于多个 HTTP 请求,并且在第一个终止后,后续请求无法访问远程对象(只是猜测)。
4) 我们不愿意使用集群的 WebLogic 环境。
5)我们还没有考虑使用像spring-remoting-cluster这样的高级框架。
任何线索/建议?提前致谢!