4

Tomcat(此处为版本 5)将会话信息存储在内存中。集群时,此信息会定期广播到集群中的其他服务器以保持同步。您可以使用数据库存储使会话持久化,但此信息也只是定期写入,并且仅真正用于故障恢复,而不是实际替换内存中的会话。

如果您不想使用粘性会话(不幸的是,我们的配置不允许这样做),这会引发会话不同步的问题。

在其他语言中,Web 框架倾向于允许您使用数据库作为主要会话存储。虽然这引入了潜在的扩展问题,但它确实使会话管理非常简单。我想知道是否有办法让tomcat以这种方式使用数据库进行会话(从技术上讲,这也将消除对tomcat server.xml中任何集群配置的需要)。

4

4 回答 4

3

肯定有办法的。虽然我强烈支持粘性会话 - 为您的服务器/数据库节省了很多负载(除非出现故障)......

http://tomcat.apache.org/tomcat-5.5-doc/config/manager.html包含有关 Tomcat 的 SessionManager 配置和设置的信息。根据您的确切要求,您可能必须实现自己的会话管理器,但是这个起点应该会提供一些帮助。

于 2008-09-17T12:09:50.867 回答
2

看看Terracotta,我认为它可以解决您的扩展问题,而无需重新设计重大的应用程序。

于 2008-09-17T12:08:53.210 回答
2

我一直是 Rails 会话技术的粉丝:将会话(压缩+加密+签名)存储在用户的 cookie 中。这样你就可以对你的心脏内容进行负载平衡,而不必担心粘性会话,或者为你的会话数据访问数据库等。我只是不确定你是否可以在没有某种形式的 Java 应用程序中轻松实现这一点重写你的会话访问代码。无论如何只是一个想法。

于 2010-07-29T01:15:09.303 回答
2

另一种选择是memcached-session-manager,这是一个基于 memcached 的会话故障转移和会话复制解决方案,适用于 tomcat 6.x / 7.x。它支持粘性会话和非粘性会话。

我创建这个项目是为了获得最佳的性能和可靠性,并且能够通过添加更多的 tomcat 和 memcached 节点来进行横向扩展。

于 2011-04-12T08:19:39.987 回答