用于tomcat的分布式HTTP会话状态服务器

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

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

要克服这一点,

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

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

我使用python为tomcat开发了会话状态服务器 。

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