集群环境和会话管理(Servlet)

时间:2012-03-25 17:42:51

标签: servlets cluster-computing

我正在阅读一本关于Java Servlets的书,我遇到了HTTPSessionActivationListener。指定在集群环境中,只能有一个包含特定会话ID的HTTPSession对象。假设集群中有2个节点A和B -

第一个请求转到节点A.这里创建了一个HTTPSession S1以及会话属性,并且响应返回给客户端。 同一客户端发送后续请求。此请求转到节点B.现在会话对象S1从节点A移动到节点B(在节点B中激活并在节点A中钝化)。

在这种情况下,会话对象和属性是否可以序列化?如果它不可序列化会发生什么?

为了计算活动会话的数量,是否应将两个节点中的会话相加以获得实际值?这通常是怎么做的?

另外我猜每个JVM的ServletContext都是唯一的。设置为servletcontext一部分的属性是否已复制到集群的所有节点中的servlet上下文?

2 个答案:

答案 0 :(得分:2)

通常我看到人们使用粘性会话(通常由负载均衡器提供,例如ec2 ELB具有此功能:http://shlomoswidler.com/2010/04/elastic-load-balancing-with-sticky-sessions.html),或者会话数据存储在共享存储库中,例如数据库或NoSQL商店。

答案 1 :(得分:1)

春季会议似乎提供了一种名为“集群会话”的功能。它还具有将会话卸载到RedIs或GemFire缓存解决方案的功能。

参考:http://projects.spring.io/spring-session/