条件tomcat粘性会话(聚类)

时间:2012-03-10 01:41:07

标签: session tomcat servlets cluster-computing

我有一个Web应用程序,它根据映射到数据库记录的持久cookie执行大多数已登录的用户相关操作,这样每个ajax POST都不需要或不需要tomcat会话。

在极少数的ajax请求中,我有少量的servlet会话数据要为登录用户保存,我希望会话持续很长时间(只要他打开浏览器) ),即使长时间不活动。

现在,我的理解是,您可以选择tomcat集群的粘性会话或复制会话。在大多数情况下,我希望我的负载均衡器将流量发送到负载最少的tomcat实例,而servlet永远不会获取或创建会话。在极少数情况下,我需要一个会话并访问少量的会话数据。

另外,我正在使用apache mod-proxy。这会限制选择吗?

如果我选择粘性会话负载平衡,那么绝大多数不需要粘性的ajax请求都会转到同一个tomcat服务器。然而有些人表示,如果您不担心故障转移,粘性会话可以提供更好的性能。

有人可以告诉我在我的案子中有什么正确的选择吗?

我有一个想法是每当我在tomcat中创建一个会话时,我也只为特定的servlet(路径)创建一个MYSESSIONID cookie,设置为与tomcat sessionid相同的值。然后,在我需要访问会话数据的所有极少数servlet请求中,我通过这一个路由servlet,负载均衡器可以创建一个绑定到MYSESSIONID cookie的粘性会话。这是一个很好的解决方案吗?

安迪

1 个答案:

答案 0 :(得分:0)

会话是网络应用程序的全局。它不依赖于webapp中的特定servlet。您的路由servlet没有多大意义。

如果您不担心故障转移,那么粘性会话会更容易。如果您需要群集,这可能意味着您拥有大量并发用户。因此,平均而言,无论如何,所有服务器上的负载应该相似。

另一方面,如果会话中的数据非常少,而您的应用程序很少修改它,则复制会话的成本不会太高。您可以将故障转移作为附加优势,并且负载均衡器可以使用纯循环算法,确保每个服务器获得与其他服务器相同数量的请求。