2011-04-29 63 views
1

我使用JSP + Struts2 + Tomcat6 + Hibernate + MySQL作为我的J2EE开发环境。由于该项目规模庞大且即将出现性能问题,因此决定将该项目部署在多台服务器上。由于该项目是在三层体系结构中开发的,因此我们希望为每层分配一台独立的机器,并通过千兆以太网连接将它们连接起来。所以我们需要一个DB-Server(MySQL),一个Logic-Server(Struts2 + POJOs)和一个Web-Server。如何在多个服务器上分发j2ee应用程序?

我想DB-Server和逻辑 - 服务器之间的通信将不会是一个问题,但连接的Web服务器和逻辑 - 服务器似乎有点莫名其妙给我。考虑到我们可能会增加下一阶段各层服务器的数量,在这种情况下我有什么选择?

任何想法将不胜感激!

[编辑]

Tomcat是逻辑 - 服务器的一部分,它位于何处POJO和支柱走了,我的意思的Web服务器是一个前端服务器这需要用户的请求,并把它们分派给逻辑服务器。另一方面,我们可能想要使用多个逻辑服务器。它甚至有可能吗?

顺便说一句,将JMS是任何帮助吗?

回答

0

根据层级分发应用程序不一定是一个好主意。与单个JVM内的通信相比,网络通信速度较慢。出于这个原因,你想尽量减少不同机器之间的通信。这通常通过提供粗粒度界面来实现,例如,

interface User 
{ 
    void setAddress(String name, 
        String street, 
        String zip, 
        String city, 
        String country); 
} 

代替

interface User 
{ 
    void setName(String name); 
    void setStreet(String street); 
    void setZip(String zip); 
    void setCity(String city); 
    void setCountry(String country); 
} 

理性的是,如果你改变一条在User对象的信息,其他部分可能被随之改变。粗粒度接口然后确保在网络上更少的方法调用。

+1

-1超过四个参数的方法是脆弱的,难以测试和不良的风格。此外,答案与问题无关。 :-) – 2011-04-29 10:23:07

+0

@Aaron你提到的*四*是任意的。其他消息来源说六。此外,答案与问题有关,因为它告诉在多个服务器上分发j2ee应用程序时需要考虑什么。如果您有理由认为在多个服务器上分发j2ee应用程序时不需要考虑粗粒度接口,那么您的-1就是合理的。因为首先它需要大量的代码和第二休眠的变化不会采取这么友好 – Oswald 2011-04-29 10:40:32

+0

感谢您的回答,但使用粗粒度的接口不会是一个合理的选择。 – 2011-04-29 11:48:36

1

的逻辑需要去Tomcat服务器上也是如此。没有Web服务器的Struts是没有意义的。

还是你的意思“Web服务器”,如“能够理解HTTP哑文件服务器”?在这种情况下,你根本不连接它们; Web浏览器将为您执行此操作:JSP/Servlet代码将向浏览器发送图像和其他静态内容的URL,浏览器将使用这些URL直接从“Web服务器”下载数据。

你绝对不希望“逻辑服务器”下载东西并提供它。

+0

@Aaaron:你是绝对正确的tomcat左右,我编辑的问题得到错误的想法保持距离下一个观众。我想我会在“理解HTTP的笨文件服务器”上同意你的观点。那么这个是怎么回事?只是JSP页面?你能否更详细地解释你的想法? – 2011-04-29 12:25:13

+2

转储HTTP服务器提供CSS,JavaScript的静态(不是说你在JSP中生成的部分),图像,标识,不产生任何东西。 JSP与POJO一起进入逻辑服务器。 – 2011-04-29 12:27:59

+0

感谢好友,似乎有道理,但对于我拥有的JSP页面有点麻烦。我会把它为更多的考虑 – 2011-04-29 12:55:41

1

你甚至可以将Struts应用程序拆分为“逻辑服务器”和Web服务器吗?

Tomcat是一个应用服务器,因为它可以运行你的逻辑并为您的网页。 如果您真的想将您的逻辑运行负载分布到另一台服务器上,请尝试实施面向服务的体系结构。

我的经验仅限于使用:JSF的前端和一些日期操作(呈现),IBM的Websphere的逻辑(工艺设计在WebSphere Integration Developer,不是纯Java)和Oracle的数据库。所有这些服务器都托管在不同的机器上。

在你的情况,你可以使用Java Web应用程序来执行你的逻辑,并且可以在其他Tomcat服务器上运行(从前端应用程序的服务器分开)。在这种情况下,您会将您的函数公开为webservices,并让前端应用程序调用它们。

+0

萨拉姆,我认为你是对的,分离的tomcat和POJO甚至是不可能的,我糊涂了一会儿!我编辑了这个问题。你可能想重新考虑最后一部分。 – 2011-04-29 12:06:55

+0

我不确定你的意思是接受请求并将它们发送到服务器。这是否意味着你需要一个表单页面(前端)将POSTS或GETS数据插入到将数据插入DB(数据层)的Java类(逻辑层)?在这种情况下,将它们放在不同的服务器上是没有意义的。但是,如果您在前端(基于核心逻辑运行并返回数据之后)的基于服务器的重要处理负载,则可以将它们保留在不同的服务器上。 – Ali 2011-04-29 13:07:42

+0

你明白了。这就是我想到的。前端服务器POST和GET(执行操作)数据到java类(逻辑层)和逻辑层与分离的DB层进行通信。由于会有很多用户和大量请求,最好在分离的前端服务器上管理它们,并减轻逻辑服务器的负载。仍然不同意? – 2011-04-29 15:27:05

相关问题