我正在参与基于RMI的分布式解决方案的开发,并部署在多个Weblogic 10gR3(10.3.0.0)节点上。其中一个节点承载RMI服务器,其他节点通过外部JNDI提供程序访问它。在尝试通过添加其他RMI服务器来改善我们的基础架构时,我们遇到了一些问题。
我们的基础设施详情:
-RMI服务器在受管服务器上运行,在端口7005上
-RMI客户端通过远程JNDI提供程序访问它,该提供程序指向类似于:t3:// hostname:7005
我发布了迄今为止我们尝试过的内容,创建了额外的RMI服务器,以及它为什么不起作用:
1)使用Amazon ELB - >这不是一个选项,因为它需要打开我们的运行时端口(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请求,并且在第一个TCP请求被终止之后,后续请求无法访问远程对象(只是猜测。)
4)我们不愿意使用集群WebLogic环境。
5)我们还没有考虑使用像spring-remoting-cluster这样的高级框架。
任何线索/建议?提前谢谢!
答案 0 :(得分:0)
似乎我唯一的(安全)选项是将我的应用程序节点添加到WebLogic Cluster并通过集群平衡负载或在我的应用程序中执行重新设计。