【问题标题】:issues with deploying rails servers to multiple hosts将 Rails 服务器部署到多个主机的问题
【发布时间】:2012-03-27 01:11:16
【问题描述】:

我经常听说将传统的单体 Rails 应用程序(即没有内部 Web API、没有消息队列、没有 Redis/memcached 服务器)部署到多个服务器会产生一堆很难调试的错误,但我尽管谷歌搜索了几个小时,我还是很难想出一些具体的例子

我能想到的一些明显的问题是:

观察者 - 可能无法正常工作,因为观察只在一台服务器上传播,而不是全部(假设没有消息队列)

会话 - 可能需要将这些存储在需要它自己的主机的数据库中

缓存 - 任何清扫器都会在服务器之间传播失效问题。

还有其他人愿意贡献吗?我真的很感谢其他人可能遇到过的任何文章,或者只是一般的智慧:)

【问题讨论】:

    标签: ruby-on-rails ruby soa


    【解决方案1】:

    观察者只是代码回调。 它们在每个进程、每个服务器上运行。

    在过去几年中,会话默认使用 cookie 存储。 所以多台服务器是没有问题的。 如果您的 cookie 中没有足够的空间,那么我建议您可能做错了什么。

    缓存失效确实是个问题。 但它总是如此。 一种解决方案是将缓存分解为独立服务。 像 Facebook 这样的网站拥有巨大的内存缓存农场

    我认为扩展和集群始终是一个难题。 但这似乎是反对 Rails 的古老论点。 如果说过去几年有什么不同的话,那就是铁轨在这方面大放异彩。 随着 ec2、nosql 和服务器自动化成为社区的常态。

    【讨论】:

    • 是的,我完全相信 Rails 可以扩展没有问题,我现在只是在使用旧版 Rails 2.3 应用程序,并试图说服其他人采取婴儿步骤扩展 :)
    • 观察者是有意义的——当你期望在每台服务器上发生观察时就会出现问题——缓存就是一个很好的例子,但这完全是另一个问题。会议我不完全跟进。我想您是说所有会话数据都完全存储在 cookie 中 - 这是自行转向 DB 存储的一个很好的理由。我想如果你使用 FileStore 之类的东西,它会坏掉。
    • 如果您使用 cookie 存储,则服务器和浏览器之间没有联系。如果您的数据足够小,那您为什么不使用它。
    • 哈哈,我希望我能保证,但我感觉 cookie 存储的信息比它们应该存储的多得多 =/ 好老的 SOS 项目...
    • 我有一个项目存储了很多状态,但我意识到它实际上是一个持久对象。所以我创建了一个 GameState 模型,并且只存储了session[:gate_state_id] = @game_state.id。它相当于一个数据库会话,但更加灵活和明确。
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 2011-12-10
    • 2011-08-29
    • 2017-04-05
    • 2014-05-26
    • 2021-10-29
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多