我正在开发分布式Web应用程序,我们决定将Web模块与业务服务分开,以使其更具可扩展性。
情况如下: 我们有一个服务器实例可以保存Web应用程序(控制器,JSP等)以及许多带有业务服务的服务器实例。如果Web应用程序需要任何数据,它会通过Hessian询问任何现有的业务服务器,然后得到响应并显示数据。
目前我们根据登录用户从数据库中检索数据并且无法更改,因此每个服务器都应该知道要求哪个用户执行此任务。
我的问题是: 您是否知道将用户会话保持在多个独立应用程序中的解决方案?
例如,其中一个解决方案可以在每次请求时发送用户名,但对我们来说这不是一个好主意。
非常感谢
答案 0 :(得分:6)
这个问题有两种方法:
1)将所有会话信息存储在中央memcached服务器
中2)使用会话感知负载均衡器,它将同一用户引导到相同的节点。
答案 1 :(得分:4)
使用分布式哈希表来存储和检索来自任何服务器的会话。例如,尝试Hazelcast。它是开源的,超级简单;请参阅下面的示例。
Map<String, Session> mapSessions = Hazelcast.getMap("sessions");
// session is created or updated so put it into the sessions map
mapSessions.put(sessionId, session);
// any server needing to access a session should just retrieve
// it from the map.
// Map is distributed/shared so any JVM running Hazelcast can
// read the sessions.
Session session = mapSessions.get(sessionId);
Hazelcast是点对点的。只需包含一个jar并开始分享您的会话。
答案 2 :(得分:0)
分布式Memcached服务器将是一个更好的选择,因为它可以优雅地管理存储。另一种替代解决方案是使用Redis,因为它比Memcached快得多,并且可以存储不同类型的数据类型,也可以用作数据库