Servlets 群集环境和会话管理(servlet)

Servlets 群集环境和会话管理(servlet),servlets,cluster-computing,Servlets,Cluster Computing,我正在读一本关于Java servlet的书,在那里我遇到了HTTPSessionActivationListener。指定在集群环境中,只能有一个包含特定会话id的HTTPSession对象。假设集群中有两个节点a和B- 第一个请求发送到节点A。在这里,HTTPSession S1与会话属性一起创建,响应返回到客户端。 同一客户机发送后续请求。该请求转到节点B。现在会话对象S1从节点A移动到节点B(在节点B中激活,在节点A中钝化) 在这种情况下,会话对象和属性是否应该是可序列化的?如果它不可序

我正在读一本关于Java servlet的书,在那里我遇到了
HTTPSessionActivationListener
。指定在集群环境中,只能有一个包含特定会话id的HTTPSession对象。假设集群中有两个节点a和B-

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

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

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


另外,我猜ServletContext对于每个JVM都是唯一的。是否将属性设置为集群所有节点中servletcontext复制到servlet context的一部分?

通常我看到人们使用粘性会话(通常由负载平衡器提供,例如ec2 ELB具有此功能:),或者会话数据存储在共享存储库中,例如数据库或NoSQL存储

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


参考资料:

谢谢Kevin-提供了很好的见解。如果应用服务器宕机,我想如果使用粘性会话功能,会话将丢失。在共享repo中存储会话数据-可以通过配置实现,还是应该由应用程序开发人员进行编码?我在你提供的链接中看到,app developer必须进行相关更改。通常,会话id通过cookie返回,该会话id用于在存储中查找数据。我认为,这都是自定义应用程序逻辑(如果你使用spring,你会将代码放入拦截器)。此外,你关于应用程序服务器崩溃的说法是正确的——还有粘性会话的限制。谢谢@yathirigan!