2012-11-24 46 views
6

我有一个RoR网络应用程序(w/mysql),可以在多台相同的服务器上进行负载平衡。该应用程序需要cookies和会话才能运行。使用ActiveRecordStore +粘性会话的RoR Cookie

当前客户端总是路由到负载均衡器后面的同一台服务器,如果服务器关闭,客户端将被路由到不同的服务器,并且他们的会话将结束。

当前体系结构的负载均衡器将只在同一个数据中心中负载均衡机器。我希望使用多个数据中心,以使用DNS轮循机制在地理上进行负载平衡,并提供额外的冗余。

如果我在我的RoR应用启用为ActiveRecordStore会话存储,这应该解决上述问题,客户端可以被路由到每一个服务器和他们的会议将是完整的。它是否正确?

是否存在使用ActiveRecordStore进行会话的严重后果?

回答

4

快速回答: 考虑到所有数据中心的所有服务器都与同一个数据库进行通话,是的,这可以解决您的问题。

后果: 这里的一个明显的问题是,从不同的数据中心的所有服务器进行通信与数据库中的一个数据中心。这是非常低效的,因为它抵消了将应用程序分发到不同数据中心的大部分收益。当然,您可以尝试通过互联网复制mysqls,但这可能会导致数据最终保持一致,这意味着在切换服务器时,用户可能仍面临无效会话。

备选: 全球分布式店为您的会话,有点像卡桑德拉环或可能了Riak可能会更好,因为这些数据库设计保持同步,并提供一致的数据访问。