使用ActiveRecordStore + Sticky Sessions的RoR Cookies

时间:2012-11-24 22:52:06

标签: ruby-on-rails-3 activerecord

我有一个在几个相同服务器上负载平衡的RoR Web应用程序(带有mysql)。该应用程序需要cookie和会话才能运行。

目前,客户端始终路由到负载均衡器后面的同一服务器,如果服务器被关闭,客户端将被路由到不同的服务器,并且它们的会话将结束。

当前架构的负载均衡器仅负载同一数据中心内的平衡机器。我想使用多个数据中心在地理位置上使用DNS循环进行负载平衡,并提供额外的冗余。

如果我要在我的RoR应用程序中打开ActiveRecordStore进行会话存储,这个应该解决上面的问题,客户端可以路由到每个服务器,并且它们的会话将完好无损。这是对的吗?

对会话使用ActiveRecordStore会有严重后果吗?

1 个答案:

答案 0 :(得分:4)

快速回答: 鉴于所有数据中心的所有服务器都与同一个数据库通信,是的,这可以解决您遇到的问题。

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

<强>替代: 一个全局分布的会话商店,有点像cassandra环或者也许是riak可能会更好,因为这些数据库旨在保持同步并提供对数据的一致访问。