有没有办法用Tomcat指定不同的会话存储?

时间:2008-09-17 12:02:26

标签: java tomcat session

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

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

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

4 个答案:

答案 0 :(得分:3)

肯定有办法。虽然我强烈投票支持粘性会话 - 为你的服务器/数据库节省了太多的负担(除非出现问题)......

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

我创建了这个项目以获得最佳性能和可靠性,并且只需添加更多tomcat和memcached节点即可扩展。