可扩展的http会话管理(java,linux)

Ran*_*Ran 16 java linux session scalability http

是否有可扩展的http会话管理的最佳实践?

问题空间:

  • 购物车的一种用例.网站周围的用户商店,最终退房; 会话必须保留.
  • 多个数据中心
  • 每个数据中心都有多个Web服务器
  • Java,linux

我知道有很多方法可以做到这一点,我总能想出我自己的具体解决方案,但我想知道stackoverflow的人群智慧是否可以帮助我专注于最佳实践

一般来说,似乎有一些方法:

  • 不要保持会议; 总是运行无国籍,虔诚[对我不起作用......]
  • 使用j2ee,ejb和该团伙的其他成员
  • 使用数据库来存储会话.我想有一些工具可以让它更容易,所以我不需要自己制作
  • 使用memcached存储会话(或其他类型的中间,半持久存储)
  • 使用键值DB.比memcached"更持久"
  • 使用"客户端会话",意味着所有会话信息都存在于隐藏的表单字段中,并从客户端传递到服务器.服务器上没有存储任何内容.

有什么建议?谢谢

Gre*_*zky 6

我会选择一些标准的分布式缓存解决方案.可能是您提供的应用程序服务器,可能是memcached,可能是兵马俑 可能并不重要你选择哪一个,只要你使用足够受欢迎的东西(所以你知道大多数错误已经被追捕).

至于你的其他想法:

  • 不要保持会话 - 正如你所说的那样不可能
  • 客户端会话 - 太不安全 - 假设某人破解cookie以将折扣价格放入购物车中
  • 使用数据库 - 数据库通常是解决的最难的瓶颈,不要再放任何东西了.

那是我的2美分:)

关于多个数据中心 - 您希望会话与其启动的数据中心具有一定的亲和力.我不认为有任何解决方案可以在不同的数据中心之间工作的分布式缓存.


ska*_*man 5

您似乎错过了列表中的vanilla复制的http会话.任何值得盐的servlet容器都支持跨群集复制会话.只要您放入会话的项目不是很大并且可以序列化,那么它很容易使它工作.

http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

编辑:但是,似乎tomcat会话复制无法很好地扩展到大型集群.为此,我建议使用JBoss + Tomcat,它提出了"伙伴复制"的想法:

http://www.jboss.org/community/wiki/BuddyReplicationandSessionData