【问题标题】:Distributed HTTP session state server for tomcat用于 tomcat 的分布式 HTTP 会话状态服务器
【发布时间】:2018-06-03 19:19:37
【问题描述】:

我们的一个 Spring MVC Web 应用程序部署在多个带有 tomcat 7 的 web 服务器上,LB 位于前端以平衡请求并将请求分发到适当的 tomcat 服务器。

这个网络农场的问题是每个 tomcat 服务器都能够存储和检索自己的 HTTP 会话,但 LB 可以向任何一个网络服务器发送请求。因此,如果通过 tomcatServer1 为用户提供登录页面,那么它将在其受尊重的服务器上创建 HTTP 会话,并且可能会发生仪表板页面 LB 的第二次请求将其发送到 HTTP 会话不可用的 tomcatServer2,导致用户再次被重定向到登录页面。

为了克服这个问题,

  1. 我们在 LB 上使用“Sticky Session”属性,这样如果用户(HTTP 会话 + 用户的公共 IP)第一次从 tomcatServer1 提供服务,那么它将绑定到该服务器。设置“粘性会话”没有帮助,因为它没有平等地利用所有服务器。
  2. 另一种方法是,开发我们自己的会话状态服务器并部署在服务器上,然后所有服务器都应与该服务器通信以存储和检索会话对象/数据。
  3. 为 Servlet Container 提供自定义 SessionManager

关于#2,如果我们能够开发状态服务器,那么我还必须修改与HttpSession.setAttribute()HttpSession.getAttribute()相关的代码。 所以问题是,是否可以为 setAttribute 和 getAttribute 方法覆盖 HttpSession 的实现? 另外关于#3,我不知道这个解决方案是否会提供分布式状态会话服务器?

【问题讨论】:

标签: java spring session tomcat


【解决方案1】:

我使用python为tomcat开发了session state server

因此,我不需要更改已经为创建/访问和销毁会话而编写的代码。此外,由于有单独的服务器/服务正在处理和存储会话,因此不需要主集群。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多