在 Rails 应用程序中分离后端和前端服务器?
Posted
技术标签:
【中文标题】在 Rails 应用程序中分离后端和前端服务器?【英文标题】:Separating back end and front end servers in Rails application? 【发布时间】:2012-08-15 23:24:50 【问题描述】:我有一个执行大量媒体编码的 Rails 应用程序。我正在通过后台进程处理它,但我看到 CPU 过载并且前端加载时间肯定比它们应该的要慢(或者在后端部分变得更大之前)。
所以问题是:具有媒体编码功能的 Rails 应用程序会遇到 CPU 负载和前端速度变慢的问题。目标——解耦前端和后端(媒体编码)部分。
问题 - 将现有应用程序分成两部分(前端部分和后端部分)的最佳方法是什么?
1) 在两台服务器上运行应用程序的两个副本,然后通过 HTTP(或连接到远程数据库)在 POST/PUTting 信息之间进行调用是个好主意吗?
2) 将 CPU 密集型部分包裹在 Rails 代码中是个好主意,还是应该将其从 Rails 功能中剥离出来?
如果有人可以指出运行多服务器 Rails 应用程序的良好指南,那就太好了(搜索返回有关多服务器 Capistrano 部署的问题,但我需要一些不太具体的食谱)。
【问题讨论】:
【参考方案1】:一种行之有效的常用方法是使用像Resque 这样的工作队列。
管理代码 为了便于管理,请将处理代码和应用程序保留在“应用程序中”。 部署两个应用服务器,但在处理服务器上运行 resque worker。
状态变化 如果处理作业与 ActiveRecord 持久化对象相关,您可以从前端轮询状态,并在编码过程中从后端定期更新它。
您可能会发现使用state machine 很有用。
您的问题已转移 现在你是云规模™:D 如果您的队列太长,可以添加更多运行工作程序的处理主机。如果您的前端是唯一可通过 Web 访问的主机,您可以设置机架中间件或运行 Rainbows 以将处理后的结果通过前端代理到客户端。
听起来是一个有趣的项目。祝你好运!
【讨论】:
以上是关于在 Rails 应用程序中分离后端和前端服务器?的主要内容,如果未能解决你的问题,请参考以下文章