如何在多台服务器上分发j2ee应用程序?

时间:2011-04-29 10:10:44

标签: java performance deployment java-ee distribution

我正在使用JSP + Struts2 + Tomcat6 + Hibernate + MySQL作为我的J2EE开发环境。由于该项目的大规模和即将到来的性能问题,已经决定在多个服务器上部署该项目。 由于该项目是在3层架构中开发的,因此我们希望为每个层分配一台独立的机器,并通过GigaBit Ethenrnet连接进行连接。所以我们需要一个DB-Server(MySQL),一个Logic-Server(Struts2 + POJO)和一个Web服务器。

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

任何想法都将受到高度赞赏!

[编辑]

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

顺便问一下,JMS会在这里有任何帮助吗?

3 个答案:

答案 0 :(得分:1)

逻辑也需要在Tomcat服务器上运行。没有Web服务器的Struts毫无意义。

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

你绝对不希望“逻辑服务器”下载这些内容并提供服务。

答案 1 :(得分:1)

您是否可以将Struts应用程序拆分为“逻辑服务器”和Web服务器?

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

我的经验仅限于使用:JSF用于前端和一些日期操作(用于演示),IBM Websphere用于逻辑(流程是在Websphere Integration Developer中设计的,而不是纯Java),以及Oracle用于DB。所有这些服务器都托管在不同的计算机上。

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

答案 2 :(得分: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对象中的一条信息,其他部分也可能会被更改。然后,粗粒度接口确保通过网络进行更少的方法调用。