在Web应用程序中,用户会话管理对于管理用户状态至关重要。 在本文中,我们将学习在集群环境中管理用户会话所遵循的方法,以及如何使用Spring Session以更加简单和可扩展的方式实现它。
通常在生产环境中,我们将有多个服务器节点,并在它们前面有一个负载平衡器,并且所有客户端流量都将通过负载平衡器到达其中一个服务器节点。 因此,我们需要某种机制来使用户会话数据可用于集群环境中的每个客户端。
传统上,我们一直使用以下技术来管理会话:
- 单节点服务器
- 具有负载均衡器和粘性会话的多节点服务器
- 具有负载均衡器和会话复制的多节点服务器
- 持久性数据存储中具有负载均衡器和会话数据的多节点服务器
让我们简要地看一下这些方法。
1.单节点服务器
如果您的应用程序不是对企业至关重要的服务,那么并发用户不会太多,并且可以接受一些停机时间,那么我们可以进行单节点服务器部署,如下所示:
在此模型中,对于每个浏览器客户端,将在服务器上创建会话对象(对于Java,则为HttpSession ),并且SESSION_ID将被设置为浏览器上的cookie,以标识会话对象。 但是对于大多数应用程序来说,这种单服务器节点部署是不可接受的,因为如果服务器关闭,服务将完全关闭。
2.具有粘性会话的多节点服务器
为了使我们的应用程序高度可用并满足更多用户,我们可以在负载均衡器后面有多个服务器节点。 在“粘性会话”方法中,我们将负载均衡器配置为将所有请求从同一客户端路由到同一节点。
在此模型中,将在服务器节点中的任何一个上创建用户会话,并将来自该客户端的所有其他请求发送到该相同节点。 但是这种方法的问题是,如果服务器节点出现故障,那么该服务器上的所有用户会话都将消失。
3.具有会话复制的多节点服务器
在此模型中,用户会话数据将在所有服务器节点上复制,以便可以将任何请求路由到任何服务器节点。 即使一个节点发生故障,客户端请求也可以由另一节点服务。
但是会话复制需要更好的硬件支持,并