2009-10-19 27 views
1

我有一个web应用程序部署到运行Apache,Tomcat和它们前面的负载平衡器的三个服务器。现在我正在考虑对它们进行聚类。群集Java EE Web应用程序 - 选项?

以下是常用的选项选择和我的限制,我知道的:基于

  1. 序列化会话集群: 在我的情况下,应用程序使用了大量的会话对象。所以我宁愿不去解决这个问题。在不久的将来,服务器的数量可能会增加到五个以上。

  2. 兵马俑: 听起来很有趣,但购买企业许可证不是一种选择。

  3. 使应用程序成为无状态: 听起来很诱人,虽然它有点不起作用。我很想听听它的一些设计指南和经验。

其他建议?

我的主要目标是故障转移。

+0

您的目标是什么? – 2009-10-19 16:16:30

回答

1

传统上,这是一种非常罕见的网络应用程序,它确实是无状态的,尽管我猜想在这些Ajax日子里浏览器中保持状态更为常见。

如果您的意图是使用群集,以便单个用户会话在服务器丢失后仍然存在,那么您将需要支付某种传输成本。您可能会:

  • 将所有内容都保存在数据库中。也许序列化为一个blob。会话超时时,您需要保留这些斑点。诸如WebSphere之类的应用服务器具有这种能力。
  • 使用某种内存内存复制。再次,将不得不有一些transgfer /序列化成本。您可以将该复制的频率与会话最近更新丢失的可能性进行折衷。

在任何一种情况下,您的目标都是“会话关联性”:用户的请求默认转到同一个集群成员,有效地将其“主”实例用作写入缓存。

我不知道你的环境中提供了什么现成的产品,理想情况下,你的服务器提供商应该有内置的会话管理功能 - 写这些东西你的自我并不是微不足道的。

2

我的理解是,您目前正在3台服务器上负载均衡您的负载,因此,对于我来说,您已经在做群集(可伸缩性部分),而我不确定“群集它们”的确切含义。你的意思是超越透明故障吗?

基于序列化的会话聚类:就我而言,应用程序在会话中使用了很多对象。所以我宁愿不去解决这个问题。在不久的将来,服务器的数量可能会增加到五个以上。

这只对你有用,如果你不希望你的用户在会话失败的时候松开会话。如果你真的想这样,你需要“持久性会话”(但要注意,这有性能上的成本)下,Tomcat提供several way来实现这一点:使用会话持久性和保存会话共享文件

  1. 系统,
  2. 使用会话持久性并将会话保存到共享数据库,
  3. 使用内存中复制。

这需要一些真正的实验台,但个人而言,内存复制是我的首选解决方案(最佳性能)。避免以任何代价序列化数据库(根据我的经验,性能很差)。

兵马俑:听起来很有趣,但购买企业许可证不是一种选择。

我想你在这里指的是他们的JVM级集群解决方案。在应用程序下面聚集JVM(vs聚集应用程序本身)是恕我直言的解决方案,当应用程序无法轻松聚集时?但是,为什么要使用提供这种功能的应用程序服务器来执行此操作?

使应用程序成为无状态:听起来很诱人,尽管它是一项工作。我很想听听它的一些设计指南和经验。

您的意思是不使用HTTPSession?如果是,为什么?你与HTTPSession面临什么问题?你为什么要这样做?


说实话,你试图达到的目标并不清楚。您已经有了一个可伸缩的解决方案(垂直和水平方向),没有单点故障(负载平衡器除外,但是...)以及极少数应用程序(例如关键生命应用程序,财务应用程序)确实需要透明容错换句话说,许多人可以没有生活)。此外,透明容错在性能和/或硬件方面具有不可忽视的实际成本。所以,真正的问题是:当用户放弃会话时,你的企业是否会损失那么多钱?这是关键/频繁吗?这是否有理由花钱来实现透明容错?

+0

我不希望用户在服务器死亡或重新启动时丢失会话。尽管它并不重要,但对于用户必须失去活动会话而言,这是一个巨大的折扣。那么,企业需要它。 – Langali 2009-10-19 18:00:18

+0

如果企业需要它,神需要它。我会建议内存复制,然后(和节点之间的高速LAN)。 – 2009-10-19 18:06:16

2

兵马俑:听起来很有趣,但购买企业许可证不是一种选择。

兵马俑是开源的,所以你注意到有义务购买许可证。它为Web会话复制提供了非序列化方法,这正是您所要求的。

要开始,请点击这里:http://www.terracotta.org/web/display/orgsite/Web+Sessions