使用非连接默认会话存储的优点是什么?

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

另外,任何人都可以提供最快的会议商店的任何基准/技巧? 我的猜测是Redis由于其更简单的键/值存储。

将会话数据存储在数据库(MongoDB,Redis等)中的唯一原因是它可以跨越Node进程使用,并且在发生故障时持久。 在横向扩展体系结构中,非常希望拥有无状态服务器,以便无论特定用户连接到哪个服务器,服务器都可以在不丢失任何状态的情况下进行上下移动,从而使所有内容都能正常工作。

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

一种方法是将数据存储在每个请求提交的客户端的cookie中,但这不是很安全。 另一种方法是尝试跨节点服务器同步状态,这可以完成,但往往是昂贵和容易出错。 最简单的方法是将会话ID存储在cookie中,然后将实际的会话数据存储在数据库中。 每个节点服务器都可以访问相同的数据库,以便查找会话数据。 通过这种方式,您可以轻松扩展和放大节点服务器,并在服务器出现故障时负载平衡,而不会丢失任何数据。

在性能方面,内存商店将是最快的(但有上述缺点)。 Redis将是第二快,MongoDB将是最慢的(通常比Redis慢4倍)。 请记住,对于绝大多数网站来说,要么足够快。