在 Passenger/Rack 中共享 HTTP 会话数据--当前的最佳实践是什么?

在 Passenger/Rack 中共享 HTTP 会话数据--当前的最佳实践是什么?

我公司有一个面向客户的 Web 应用程序,该应用程序分布在多台服务器上,以实现负载平衡和容错。该应用程序使用 Ruby(Rack,在 Passenger 下运行)编写,应用程序的身份验证通过 HTTP 会话 cookie 处理。

我们目前使用 SQL 数据库来存储会话数据(将其作为标准数据库复制的一部分进行复制),但是由于我们的 SQL 数据库是 Postgres,并且不支持多主操作(在主数据库发生维护中断期间,登录用户可以针对从属数据库检查其会话,但新用户无法登录),因此这种解决方案并不理想。每次页面点击的 SQL 查询开销也不是最佳的。

我想知道大家目前在生产中使用哪些实用的解决方案。
理想情况下,我们正在寻找:


  • 已登录的用户Server A应该能够透明地移动到共享会话存储,Server B而无需重新登录。

  • 良好的冗余度
    丢失单个服务器不会丢失任何会话状态。

  • 低开销,
    至少“比每次页面点击的 SQL 查询更少”。

答案1

到目前为止,我们发现最有希望的解决方案是rack-session-mongo. 这与 MongoDB 复制相结合,应该可以满足共享会话存储和冗余/故障转移要求。

我们正在开始测试它是否满足“低开销”要求,但它似乎在这方面也很有希望。

相关内容