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

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

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

有帮助吗?

解决方案

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

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

其他提示

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top