我正在寻找避免内存中会话复制/群集并将会话存储在数据库中的方法。此时使用Tomcat的JDBCStore是无用的,因为它只在数据库中存储非活动会话以保存服务器内存。 有什么建议吗?Tomcat:将会话存储在数据库中
由于前期 费边
我正在寻找避免内存中会话复制/群集并将会话存储在数据库中的方法。此时使用Tomcat的JDBCStore是无用的,因为它只在数据库中存储非活动会话以保存服务器内存。 有什么建议吗?Tomcat:将会话存储在数据库中
由于前期 费边
如果你不想在它应该被使用的方式来使用会话,那么就不要使用它在所有 - 开发自己的会话对象。它仍然可以实现HttpSession
,甚至可以从HttpSession
的实现延伸。
您可以使用Filter
来包装您的请求,以便它返回您的会话对象而不是标准会话对象。在你的会话中,你可以将内容存储在数据库而不是内存中。
而不是写入数据库,您可以使用Hazelcast - 它提供分布式集合。但我想这将花费与配置会话复制相同的工作量。会话复制并不困难 - 它受到所有容器的支持。
这些都是粗略的指导方针,这项任务并不是微不足道的。我建议坚持使用标准会话使用模式,并且只在真正需要时才将数据存储在数据库中。
为了避免复制的需要,您可以尝试使用粘滞会话 - 即当用户通过负载平衡器定向到服务器时,该用户的每个后续请求都会发送到同一台服务器。
你可能想看看this project,我宁愿将会话存储在memcached而不是数据库中。
对我来说似乎没有办法,然后自己实现一个JDBC会话管理器,但感谢您的答案和时间 - Hazelcast需要更仔细一下,对我来说似乎非常强大。我会做类似于J. Brisbin:http://jbrisbin.com/web2/articles/tomcat-session-manager-backed-by-riak/
出于好奇,你有没有看过Amazon的Elastic Beanstalk?他们提供粘性会话。 – stepanian 2011-09-09 04:46:00