我的公司有一个面向客户的Web应用程序分布在多个服务器上,以实现负载均衡和容错function。 该应用程序是用Ruby(Rack,在Passenger下运行)编写的,通过HTTP会话cookie来处理应用程序的身份validation。
我们目前使用SQL数据库来存储会话数据(将其作为标准数据库复制的一部分进行复制),但是这种解决scheme并不理想,因为我们的SQL数据库是Postgres,并且不支持多主操作(在维护中断期间主数据库login用户可以检查他们的会话对一个奴隶,但新用户无法login)。 每个页面命中的SQL查询的开销也不是最佳的。
我想知道人们目前在生产中使用的实际解决scheme。
理想情况下,我们正在寻找:
共享会话存储
login到Server A用户应该能够透明地移动到Server B而不必重新login。
良好的冗余
丢失单个服务器不应该失去任何会话状态。
低开销
至less“比每个页面命中的SQL查询密集”。
到目前为止,我们发现的最有希望的解决scheme是rack-session-mongo 。 这与MongoDB复制相结合,应该同时满足共享会话存储和冗余/故障转移的要求。
我们正在开始testing,看它是否符合“低开销”的要求,但在这方面看来也是有希望的。