6

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

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

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

如果我要在我的 RoR 应用程序中为会话存储打开 ActiveRecordStore,这应该可以解决上述问题,客户端可以路由到每个服务器,并且它们的会话将保持不变。它是否正确?

使用 ActiveRecordStore 进行会话是否有严重后果?

4

1 回答 1

4

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

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

替代方案: 为您的会话建立一个全球分布的存储,有点像 cassandra ring 或 riak 可能会更好,因为这些数据库旨在保持同步并提供对数据的一致访问。

于 2013-11-19T09:44:03.130 回答