在Rails应用程序中分离后端服务器和前端服务器?

时间:2012-08-15 23:24:50

标签: ruby-on-rails webserver decoupling

我有一个Rails应用程序,可以进行大量的媒体编码。我通过后台进程处理它,但我发现CPU过载并且前端加载时间肯定比它们应该更慢(或者在后端部分变大之前)。

所以问题:具有媒体编码功能的Rails应用程序会遇到CPU负载而前端速度变慢。目标 - 解耦前端和后端(媒体编码)部分。

问题 - 将现有应用程序拆分为两个部分(前端部分和后端部分)的最佳方法是什么?

1)在两台服务器上运行两个应用程序副本并在之间通过HTTP(或连接到远程数据库)发布/ PUTting信息之间进行调用是一个好主意吗?

2)将CPU内容部分保存在Rails代码中是一个好主意,还是应该将其从Rails功能中删除?

如果有人可以指出运行多服务器Rails应用程序的好指南,那就太棒了(搜索会返回有关多服务器Capistrano部署的问题,但我需要一些不太具体的配方)。

1 个答案:

答案 0 :(得分:0)

运行良好的常用方法是使用Resque等工作队列。

管理代码
为了便于管理,请将处理代码和应用程​​序保留在“应用程序”中。 部署两个应用服务器,但在处理服务器上运行resque worker。

状态变化
如果处理作业与ActiveRecord持久对象相关,则可以从前端轮询状态,并在编码过程中定期从后端更新它。

您可能会发现使用state machine很有用。

您的问题已经移动
现在你是云规模™:D 如果队列太长,可以添加更多处理运行工作程序的主机。如果您的前端是唯一可通过Web访问的主机,则可以设置机架中间件或运行彩虹,以通过前端向客户端代理处理后的结果。

听起来像一个有趣的项目。祝你好运!