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

VIV*_*VEK 3 java session distributed-computing virtual-machine

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

请帮助我清除这种混乱.

JB *_*zet 12

有几种解决方案:

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

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