如何在多个帐户服务器上/水平扩展时处理会话?

时间:2019-07-01 17:54:43

标签: node.js express session load-balancing

我正在开发一个Web应用程序,并且想正确地进行操作,因此我始终保持可伸缩性。使我困惑的一件事是如何处理多台服务器上的会话。

简短示例:
假设 Anna 登录到我的网页上,并且负载均衡器将其重定向到服务器X 服务器X 存储 Anna 的会话数据,并在 Anna 关闭网页后不久。
大约10分钟后,安娜再次打开页面,并将其重定向到服务器Y 。她的会议应该仍然活跃。

服务器Y 怎么知道是她?

  │
  ├── Anna ─> load-balancer ─> Server X ─> Session Data on X
  │
10 mins pass
  │
  └── Anna ─> load-balancer ─> Server Y ─> How to get session data on X?

  • 是否可以无会话地提供经过身份验证的api请求?
  • 将会话数据存储在中央数据库中是最佳实践吗?
  • 还有另一个我可能不知道如何搜索的常见解决方案吗?

对于任何答案,我都很感激,尤其是在节点/快速应用程序的环境中。 总的来说,我想学习的是最佳实践解决方案。

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可以检查一些选项:

  1. 如果您需要存储访问令牌(oauth),则可以使用redis(快速数据库)在每个请求(https://redis.io)中由任何Node.js服务器检查令牌
  2. 您可以使用JWT,在这种情况下,由于计算出的符号(https://www.npmjs.com/package/jsonwebtoken),令牌是安全的
  3. 使用粘性会话,在这种情况下,每个用户请求都将转到同一服务器。不推荐

对于步骤1和2,您可以在http授权标头中发送令牌