在分布式应用程序内管理会

时间:2010-09-03 15:19:28

标签: web-applications session distributed

我正在开发分布式Web应用程序,我们决定将Web模块与业务服务分开,以使其更具可扩展性。

情况如下: 我们有一个服务器实例可以保存Web应用程序(控制器,JSP等)以及许多带有业务服务的服务器实例。如果Web应用程序需要任何数据,它会通过Hessian询问任何现有的业务服务器,然后得到响应并显示数据。

目前我们根据登录用户从数据库中检索数据并且无法更改,因此每个服务器都应该知道要求哪个用户执行此任务。

我的问题是: 您是否知道将用户会话保持在多个独立应用程序中的解决方案?

例如,其中一个解决方案可以在每次请求时发送用户名,但对我们来说这不是一个好主意。

非常感谢

3 个答案:

答案 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快得多,并且可以存储不同类型的数据类型,也可以用作数据库