【问题标题】:Tomcat: Store session in database [closed]Tomcat:将会话存储在数据库中[关闭]
【发布时间】:2011-06-18 21:14:20
【问题描述】:

我正在寻找一种方法来避免内存中的会话复制/集群并将会话存储在数据库中。此时使用 Tomcat 的 JDBCStore 是没有用的,因为它只在数据库中存储非活动会话以节省服务器内存。 有什么建议吗?

先谢谢了 费边

【问题讨论】:

  • 出于好奇,您看过亚马逊的 Elastic Beanstalk 吗?它们提供粘性会话。

标签: java tomcat servlets jdbc replication


【解决方案1】:

在我看来,我自己没有办法实现 JDBC 会话管理器,但感谢您的回答和时间 - Hazelcast 需要仔细观察,对我来说似乎非常强大。我会做类似 J. Brisbin 的事情:http://jbrisbin.com/web2/articles/tomcat-session-manager-backed-by-riak/

【讨论】:

    【解决方案2】:

    您可能想查看this project,我更喜欢将会话存储在 memcached 中而不是数据库中。

    【讨论】:

    • 我检查了它 - 非常有趣,但非粘性会话版本尚未准备好投入生产;(
    • 确实很有趣的项目,+1
    • 顺便说一句,memcached-session-manager 1.4 现已发布 - 支持非粘性会话
    【解决方案3】:

    如果您不想以应有的方式使用会话,那么就不要使用它 - 开发您自己的会话对象。它仍然可以实现HttpSession,甚至可以从HttpSession 的实现扩展。

    您可以使用Filter 包装您的请求,以便它返回您的会话对象而不是标准对象。在您的会话中,您可以将内容存储在数据库中而不是内存中。

    您可以使用Hazelcast 而不是写入数据库,它提供分布式集合。但我想这将花费与配置会话复制相同的努力。并且会话复制并不难——所有容器都支持它。

    这些是粗略的指导方针,任务不会是微不足道的。而且我建议坚持标准的会话使用模式,并且仅在真正需要时才将内容存储在数据库中。

    为了避免复制的需要,您可以尝试使用粘性会话 - 即当负载平衡器将用户定向到服务器时,该用户的每个后续请求都将发送到同一服务器。

    【讨论】:

    • 感谢您的快速回复。我的意图是在 Microsoft Azure 中运行几个 Tomcat。粘性会话的问题在于,Azure 的负载均衡器不支持它。在这种云环境中实现会话复制的最简单方法是将会话存储在数据库中。你有 HttpSession 扩展和过滤器的代码示例吗?谢谢你的回答
    • @Fabe - 抱歉,我没有示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多