如何在分布式应用程序中管理会话

时间:2015-09-21 06:27:40

标签: java session virtual-machine distributed-computing

我有一个部署在两个虚拟机上的Java Web应用程序。并为这些VM设置NLB(网络负载平衡)。我的应用使用会话。我很困惑,如何在两个VM中管理用户会话。即,例如 - 如果我发出请求转到VM1并创建用户会话。现在我第二次发出请求,然后进入VM2并想要访问会话数据。如何找到在VM1中创建的会话。

请帮助我清除这种混乱。

2 个答案:

答案 0 :(得分:8)

有几种解决方案:

  • 将负载均衡器配置为粘性:即属于同一会话的请求将始终转到同一个VM。优点是该解决方案很简单。缺点是如果一个VM出现故障,一半用户会失去会话
  • 配置服务器以使用持久会话。如果会话保存到中央数据库并从此中央数据库加载,则两个VM将在会话中看到相同的数据。您可能仍希望拥有粘性会话以避免同时访问同一会话
  • 配置群集中的服务器,并在群集的所有节点上分发/复制会话
  • 避免使用会话,只需使用已签名的Cookie来识别用户(并且可能包含一些其他信息)。 JSON Web令牌可能是一个很好的解决方案。在需要时从数据库中获取其他所有内容。这确保了可扩展性和故障转移,而IMO通常会使服务器上的内容更简单,而不是使其更复杂。

您必须查看服务器的文档,了解该服务器的可能性,或使用第三方解决方案。

答案 1 :(得分:-2)

我们可以使用分布式Redis来存储会话,这可以解决此问题。