可扩展的 http session 管理是否有最佳实践?
问题空间:
- 购物车类用例。用户在网站周围购物,最终结帐;必须保留 session 。
- 多个数据中心
- 每个数据中心有多个网络服务器
- Java, Linux
我知道有很多方法可以做到这一点,而且我总能想出自己的具体解决方案,但我想知道 stackoverflow 的人群智慧是否可以帮助我专注于最佳实践
一般来说似乎有几种方法:
- 不要保留 session ;始终无状态地、虔诚地运行[对我不起作用...]
- 使用 j2ee、ejb 和其他工具
- 使用数据库来存储 session 。我想有一些工具可以让这一切变得更容易,这样我就不必自己动手了
- 使用 memcached 存储 session (或其他类型的中间、半持久存储)
- 使用键值数据库。比 memcached“更持久”
- 使用“客户端 session ”,这意味着所有 session 信息都存在于隐藏的表单字段中,并在客户端和服务器之间来回传递。服务器上未存储任何内容。
有什么建议吗? 谢谢
最佳答案
我会选择一些标准的分布式缓存解决方案。 可能是您提供的应用程序服务器,可能是 memcached,可能是 terracotta 您选择哪一个可能并不重要,只要您使用的是足够流行的东西(所以您知道大多数错误已经被找到)。
至于你的其他想法:
- 不要保持 session - 如您所说不可能
- 客户端 session - 太不安全 - 假设有人破解 cookie 以将折扣价放入购物车
- 使用数据库 - 数据库通常是最难解决的瓶颈,不要在绝对必要的情况下放置更多的东西。
那些是我的 2 美分 :)
关于多个数据中心 - 您将希望 session 与其启动的数据中心具有某种亲和力。我认为没有任何可以在不同数据中心之间工作的分布式缓存解决方案。
关于java - 可扩展的 http session 管理(java,linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198648/