Performance 什么';存储Web应用程序登录用户信息的最佳方式是什么?

Performance 什么';存储Web应用程序登录用户信息的最佳方式是什么?,performance,scalability,authentication,Performance,Scalability,Authentication,我曾经参加过一个在ASP.NET上开发web应用程序的项目。对于每个登录用户,都有一个对象(这里我们称之为UserSessionObject)被创建并存储在RAM中。对于给定用户的每个HTTP请求,使用匹配的UserSessoinObject实例访问用户状态信息和到数据库的连接。因此,这个UserSessionObject非常重要 这种设计带来了后来发现的几个问题: 1) 由于这个UserSessionObject缓存在ASP.NET内存空间中,我们必须将负载平衡器配置为粘性连接。也就是说,单个

我曾经参加过一个在ASP.NET上开发web应用程序的项目。对于每个登录用户,都有一个对象(这里我们称之为UserSessionObject)被创建并存储在RAM中。对于给定用户的每个HTTP请求,使用匹配的UserSessoinObject实例访问用户状态信息和到数据库的连接。因此,这个UserSessionObject非常重要

这种设计带来了后来发现的几个问题:

1) 由于这个UserSessionObject缓存在ASP.NET内存空间中,我们必须将负载平衡器配置为粘性连接。也就是说,单个会话中的HTTP请求总是发送到后面的一个web服务器。这限制了可伸缩性和可维护性

2) 在每个HTTP请求中都会访问此UserSessionObject。为了保持一致性,对UserSessionObject有一个独占锁。在任何给定时间只能处理一个HTTP请求,因为它必须首先获得锁。性能和响应时间会受到影响

现在,我想知道是否有更好的设计来处理这种登录用户案例。 似乎什么都不共享架构都没有帮助。这意味着每次都会从数据库中检索长用户信息。恐怕这会影响性能

长用户web应用程序是否有任何设计模式?
谢谢。

将会话状态存储在数据库中,并将memcached放在数据库前面。

在StackOverflow和其他地方讨论的一种方法是签名cookie。一个cookie,其中包含您无法信任的信息,以及以只有您的服务器才能创建该信息的方式创建的哈希,因此您知道该信息是有效的。这是一种保存非高安全性信息(如用户名)的可扩展方式。只要签名的cookie满足所有条件,您就不必访问任何共享资源来确认用户已登录(您应该有一个日期戳,以防止cookie被盗成为一个长期问题,并且您还应该跟踪用户尚未通过身份验证,因此,如果不经过通常的登录过程,他们将无法访问更安全的信息)