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

How to handle sessions on multiple account servers / while scaling horizontally?

我正在开发一个 Web 应用程序并希望正确地完成它,所以我始终牢记可扩展性。让我感到困惑的一件事是如何在多个服务器上处理 sessions。

短例:
假设 Anna 登录我的网页,load-balancer 将她重定向到 服务器 X服务器 X 存储 Anna 的 session 数据并在 Anna 关闭网页后不久.
大约 10 分钟后,Anna 再次打开页面并被重定向到 服务器 Y。她的session应该还活着。

服务器 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?

我非常感谢任何答案,尤其是在 node/express 应用程序的上下文中。 总的来说,我正在寻找最佳实践解决方案,因为我渴望学习。

对于这种情况,您可以检查一些选项:

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

对于第 1 步和第 2 步,您可以在 http 授权中发送令牌 header