我有一个Web应用程序部署到运行Apache,Tomcat和前面的负载均衡器的三台服务器上。现在我正在考虑将它们聚类。
以下是我所知道的常用选项和约束选项:
基于序列化的会话群集: 在我的例子中,应用程序在会话中使用了很多对象。所以我宁愿不采用这种解决方案。此外,在不久的将来,服务器的数量可能会增加到五个以上。
赤土: 听起来很有趣,但购买企业许可证不是一种选择。
使应用程序无状态: 听起来很诱人,虽然这是一项工作。我很想听听一些设计指南和经验。
还有其他任何建议吗?
我的主要目标是故障转移。
答案 0 :(得分:2)
我的理解是,您目前正在负载平衡3台服务器上的负载,因此,对我来说,您已经在进行集群(可扩展性部分),而且我不确定您的“集群”是什么意思。你的意思是通过透明的故障转移超越吗?
基于序列化的会话聚类:在我的例子中,应用程序在会话中使用了很多对象。所以我宁愿不采用这种解决方案。在不久的将来,服务器的数量可能会增加到五个以上。
仅当您不希望用户在一个实例丢失时松开其会话时,此选项才有用。如果你真的想要这个,你需要“持久会话”(但要注意这有性能成本),Tomcat提供several way来实现这个:
这需要一些真正的工作台,但个人而言,内存复制是我的首选解决方案(最佳性能)。避免不惜任何代价序列化数据库(根据我的经验表现不佳)。
Terracotta:听起来很有趣,但购买企业许可证不是一种选择。
我猜你在这里指的是他们的JVM级集群解决方案。在应用程序下面集群JVM(与集群应用程序本身相比)是IMHO解决方案,当应用程序无法轻松集群时?但是,为什么要使用提供此类功能的应用程序服务器来执行此操作?
使应用程序无状态:听起来很诱人,虽然这是一项工作。我很想听听一些设计指南和经验。
您的意思是不使用HTTPSession
吗?如果是,为什么?你在HTTPSession
面临什么问题?你为什么要这样做?
老实说,你想要达到的目标对我来说并不清楚。您已经拥有可扩展的解决方案(垂直和水平),没有单点故障(负载平衡器除外......),极少数应用程序(例如生命关键应用程序,财务应用程序)确实需要透明的容错(在换句话说,许多人可以没有生活)。此外,透明容错在性能和/或硬件方面具有不应忽视的实际成本。因此,真正的问题是:当用户失去会话时,您的企业是否会花掉那么多钱?这是关键/频繁吗?这是否有理由花钱实施透明的容错?
答案 1 :(得分:2)
Terracotta:听起来很有趣,但购买企业许可证不是一种选择。
Terracotta是开源的,因此您必须注意购买许可证。它为Web会话复制提供了非序列化方法,这正是您所要求的。
要开始使用,请转到此处:http://www.terracotta.org/web/display/orgsite/Web+Sessions
答案 2 :(得分:1)
传统上,它是一种罕见的网络应用程序,它是真正无状态的,但我想在这些Ajax时代,保持浏览器中的状态更为常见。
如果您的目的是使用群集,以便单个用户会话在服务器丢失后继续存在,那么您将需要支付某种转移成本。你可以:
在任何一种情况下,你的目标都是“会话亲和力”:用户的请求默认转到同一个集群成员,有效地,他们的“home”实例充当写入缓存。
我不知道你的环境中现成的是什么,理想情况下你的服务器提供商应该内置会话管理设施 - 写这些东西你自己并不是完全无足轻重的。