我公司有一个面向客户的 Web 应用程序,该应用程序分布在多台服务器上,以实现负载平衡和容错。该应用程序使用 Ruby(Rack,在 Passenger 下运行)编写,应用程序的身份验证通过 HTTP 会话 cookie 处理。
我们目前使用 SQL 数据库来存储会话数据(将其作为标准数据库复制的一部分进行复制),但是由于我们的 SQL 数据库是 Postgres,并且不支持多主操作(在主数据库发生维护中断期间,登录用户可以针对从属数据库检查其会话,但新用户无法登录),因此这种解决方案并不理想。每次页面点击的 SQL 查询开销也不是最佳的。
我想知道大家目前在生产中使用哪些实用的解决方案。
理想情况下,我们正在寻找:
已登录的用户Server A
应该能够透明地移动到共享会话存储,Server B
而无需重新登录。良好的冗余度
丢失单个服务器不会丢失任何会话状态。低开销,
至少“比每次页面点击的 SQL 查询更少”。
答案1
到目前为止,我们发现最有希望的解决方案是rack-session-mongo
. 这与 MongoDB 复制相结合,应该可以满足共享会话存储和冗余/故障转移要求。
我们正在开始测试它是否满足“低开销”要求,但它似乎在这方面也很有希望。