小编app*_*tio的帖子

可伸缩Web应用程序的无状态登录/身份验证机制?

我正在尝试理解为可以在任意数量的Web服务器上运行的应用程序创建身份验证机制时的选项.到目前为止,我只对使用(网络)服务器端会话管理身份验证方面的小型网站有经验.但是,只要我想添加更多Web服务器(或PaaS环境中的"Web实例"),这种方法显然就成了一个问题; 绑定到特定计算机的身份验证状态来自我的理解,而不是您在使用负载平衡时所需要的(afaik粘性会话/粘性负载平衡是应该避免的).我正在寻找一种解决方案,允许我动态地上下调整Web服务器/实例的数量,而无需考虑身份验证机制.

我认为实现这一目标的唯一方法是从我的Web服务器中获取会话/身份验证状态.这就是我所说的"无国籍".当然,该状态必须暂时存储在某个地方,因此必须有一些不是无状态的东西.

我可以使用数据库服务器来管理所有auth会话.可以从每个http请求上的所有Web服务器访问数据库服务器,以请求用户的身份验证状态.但是,由于数据库服务器甚至比Web服务器更难扩展(这是我没有任何经验的假设),我只是将问题从Web服务器转移到数据库服务器.除此之外,我认为这不是性能方面的最佳解决方案.

我可以使用像memcached或redis这样的缓存服务器来管理会话以进行身份​​验证,而不是数据库服务器.我认为这会最小化可伸缩性问题,因为单个缓存服务器可以以高效的方式管理大量会话(或者我现在错了吗?).但我有时会读到诸如"关于缓存的一个重要观点是它的行为就像缓存一样:你刚刚存储的数据可能会丢失." 嗯,这将是一个问题.我不希望用户每2小时登录一次.我的问题是:如果缓存有足够的内存,为什么缓存中的数据会丢失?高速缓存服务器中的250MB内存是否足以同时管理超过一百万个会话而无需摆脱数据(当使用简单的键值对将会话ID映射到用户ID或反之)?

第三种解决方案可能是将auth sesson状态存储在由服务器签名且不能由客户端操纵的cookie中.但如果我没有错,服务器端就无法强制注销某个用户......

总结我的要求:

  • 我想在负载均衡器上上下调整Web服务器,auth系统应该处理它

  • 应允许用户登录至少几天
    ,例如在stackoverflow.com上

  • 如果有理由,服务器端应该能够关闭用户

我对最佳实践感兴趣.我认为有很多网站面临同样的问题并找到了解决方案.

authentication session caching scalability load-balancing

13
推荐指数
1
解决办法
2524
查看次数