我在读一本关于 Java Servlet 的书时遇到了 HTTPSessionActivationListener
。指定在集群环境中,只能有一个包含特定 session ID 的 HTTPSession 对象。假设集群中有 2 个节点 A 和 B -
第一个请求转到节点 A。这里创建了一个 HTTPSession S1 以及 session 属性,响应返回给客户端。 同一客户端发送后续请求。此请求转到节点 B。现在 session 对象 S1 从节点 A 移动到节点 B(在节点 B 中激活并在节点 A 中钝化)。
在这种情况下, session 对象和属性是否应该是可序列化的?如果它不可序列化会怎样?
为了计算事件 session 数,是否应该将两个节点中的 session 相加以获得实际值?这通常是如何完成的?
另外我猜想 ServletContext 对于每个 JVM 都是唯一的。是否将设置为 servletcontext 一部分的属性复制到集群所有节点中的 servlet 上下文?
最佳答案
通常我看到人们使用粘性 session (通常由负载均衡器提供,例如 ec2 ELB 具有此功能:http://shlomoswidler.com/2010/04/elastic-load-balancing-with-sticky-sessions.html),或者 session 数据存储在共享存储库中,例如数据库或 NoSQL店铺。
关于servlets - 集群环境和 session 管理(Servlets),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9862449/