我的理解是,您目前正在对 3 台服务器上的负载进行负载平衡,因此,对我而言,您已经在进行集群(可扩展性部分),我不确定您所说的“集群它们”到底是什么意思。你的意思是超越透明故障转移?
基于序列化的会话集群:在我的例子中,应用程序在会话中使用了很多对象。所以我宁愿不使用这个解决方案。此外,在不久的将来,服务器的数量可能会增加到五台以上。
仅当您不希望用户在一个实例下降时失去他们的会话时,这才有用。如果你真的想要这个,你将需要“持久会话”(但请注意,这会降低性能),Tomcat 提供了几种实现方式:
- 使用会话持久性并将会话保存到共享文件系统,
- 使用会话持久性并将会话保存到共享数据库,
- 使用内存复制。
这将需要一些真正的工作台,但就个人而言,内存复制是我的首选解决方案(最佳性能)。不惜一切代价避免序列化到数据库(根据我的经验,表现不佳)。
Terracotta:听起来很有趣,但购买企业许可证不是一种选择。
我猜您在这里指的是他们的 JVM 级集群解决方案。在应用程序下集群 JVM(与集群应用程序本身相比)是恕我直言,当应用程序无法轻松集群时是一种解决方案?但是,您为什么要对提供此类功能的应用程序服务器执行此操作呢?
使应用程序无状态:听起来很诱人,尽管它有点工作。我很想听听一些设计指南和经验。
你的意思是不使用HTTPSession
?如果是,为什么?你面临什么问题HTTPSession
?你为什么要这样做?
老实说,我不清楚您要达到的目标。您已经有了一个可扩展的解决方案(垂直和水平),没有单点故障(负载均衡器除外,但很好......),并且很少有应用程序(例如生命关键应用程序、金融应用程序)真正需要透明的容错(在换句话说,很多人可以没有)。此外,透明的容错在性能和/或硬件方面具有不可忽视的实际成本。因此,真正的问题是:当用户失去会话时,您的企业是否会损失那么多钱?有那么严重/频繁吗?这是否证明花钱实施透明容错是合理的?