【问题标题】:What's the advantage of using non-connect default session store?使用非连接默认会话存储有什么好处?
【发布时间】:2012-05-15 02:20:44
【问题描述】:

对于快速应用程序,我已经看到有一个 connect-mongodb 和 connect-redis 中间件用于存储会话,但我不明白为什么这是必要的 - 默认的内存中会话存储有什么问题?是否适用于需要跨多台机器同步会话的大型应用程序?

另外,任何人都可以为最快的会话存储提供任何基准/提示吗?我的猜测是 Redis,因为它更简单的键/值存储。

【问题讨论】:

    标签: session node.js redis express


    【解决方案1】:

    将会话数据存储在数据库(MongoDB、Redis 等)中的唯一原因是它可以跨 Node 进程使用,并且可以在故障中保持持久性。在横向扩展架构中,非常希望拥有无状态服务器,这样无论特定用户连接到哪台服务器,一切都可以正常工作,并且服务器可以在不丢失任何状态的情况下上下移动。

    换句话说,假设您在处理传入请求的负载平衡器后面有 10 台服务器。用户 1 发出服务器 A 处理并登录的请求。您需要存储他们已登录的事实,以便将其存储在会话中。下一个请求最终被路由到服务器 C,因为服务器 A 正忙于另一个请求。为了让服务器 C 知道用户已经登录,它需要会话数据。那么它是如何访问服务器 A 存储的会话数据的呢?

    一种方法是将数据存储在客户端的 cookie 中,该 cookie 随每个请求一起提交,但这不是很安全。另一种方法是尝试在 Node 服务器之间同步状态,这可以做到,但成本高且容易出错。最简单的方法是将会话 ID 存储在 cookie 中,然后将实际会话数据存储在数据库中。然后每个节点服务器都可以访问相同的数据库,以便他们可以查找会话数据。通过这种方式,您可以轻松地扩展和扩展 Node 服务器,并在服务器出现故障时对其进行负载平衡,而不会丢失任何数据。

    就性能而言,内存存储将是最快的(但有上述缺点)。 Redis 将是第二快的,而 MongoDB 将是最慢的(通常比 Redis 慢 4 倍左右)。请记住,对于绝大多数网站来说,任何一个都足够快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多