2014-03-05 60 views
0

我从2天开始搜索解决方案如何将多个上下文映射到单个部署的应用程序? 让我们来看看更多的细节... 我们有一个应用程序(让我们称之为全部)应该部署一次并引用多个上下文根,以便每个客户可以使用不同的URL访问这个应用程序。将多个上下文根映射到单个应用程序

ex: http://localhost:8080/Customer1 ===> webapp(All) 
    http://localhost:8080/Customer2 ===> webapp(All) 

我试过使用Apache的ProxyPass and ProxyPassReverse选项,如下所示。 但是,当服务器接收到来自客户端的请求时,它可以看到在这种情况下在服务器上部署的应用程序的上下文路径ALL(而不是CustomerX)。在服务器端,我需要知道哪些客户(上下文根)要求,这样我可以加载客户指定的登录页面,数据等。

ProxyPass /Customer1 http://localhost:8083/ALL 
    ProxyPassReverse /Customer1 http://localhost:8083/ALL 
    ProxyPass /Customer2 http://localhost:8083/ALL 
    ProxyPassReverse /Customer2 http://localhost:8083/ALL 

然后后来我才知道有关WebLogic的Sahred库的概念,它的工作..! 在weblogic中,我们可以将应用程序部署为共享库,并将其与来自不同Web应用程序(虚拟)的不同上下文根引用。 所以在我的情况下,我需要创建虚拟Web应用程序(对于客户1,客户2 ...客户n)并从这些应用程序中引用共享库应用程序。 如果我们采用共享库的方法,有什么优点和缺点?内存消耗,会话管理如何? 有什么建议?有没有其他解决方案?

回答

0

这些网络应用程序不会真的是虚拟的。对于每个应用程序,服务器应该创建一个特定的类加载器和其他所有东西所以,使用这种方法,即使使用共享库,也会消耗更多的内存。实际上,您也可以隔离共享库以避免一个客户端“打扰”另一个客户端。理想情况下,所有客户都应该完全孤立,因为一个客户不应该为另一个客户的麻烦付费(例如:资源过度使用)。

  • 相同的web应用: 每个请求 共享资源隔离:仅使用一个版本

  • 不同web应用分离的共享:计算资源,操作系统,应用程序服务器资源,类,对象池等 注lib 每个类加载器的隔离 共享资源:计算资源,操作系统,应用程序服务器资源,共享库中的类代码 (部署/版本同步) 注意:只有一个版本在

  • 不同的webapps没有共享库每一个classloader 共享资源 隔离:计算资源,操作系统和应用程序服务器资源 (某种部署隔离) 开销:Web应用程序的足迹

  • 不同的应用服务器 每个(Java)虚拟机的隔离度 共享资源:计算资源(可能以某种方式隔离)和操作系统 开销:应用程序服务器占用空间+ Web应用程序占用空间

  • 不同的虚拟机:计算资源(可隔离) 开销:OS足迹(通过智能的虚拟化在某种程度上最小化)+ Web应用程序的足迹

每(OS)的虚拟机 共享资源 隔离计算资源:磁盘空间,I/O,CPU和内存

+0

感谢您的回复。实际上,我们需要此解决方案用于ASP模型部署,其中所有客户(客户)共享公共资源并为其付费。我同意你那台服务器每个应用都有自己的类加载器。但在这种情况下,当服务器收到请求时会发生什么,它会直接将该请求传递给共享应用程序?或中间的应用程序(在这种情况下,虚拟),然后共享应用程序? – SMR

相关问题