一尘不染

Tomcat的分布式HTTP会话状态服务器

tomcat

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

这种Web耕作的问题在于,每个tomcat服务器都能够存储和检索自己的HTTP会话,但是LB可以将请求发送到任何一台Web服务器。因此,如果通过tomcatServer1为用户提供登录页面的服务,则将在其受尊敬的服务器上创建HTTP会话,并且可能由于仪表板页面LB的第二个请求将其发送到HTTP会话不可用的tomcatServer2,从而再次重定向了用户登录页面。

为了克服这个问题

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

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


阅读 225

收藏
2020-06-16

共1个答案

一尘不染

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

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

2020-06-16